From cd67e1f34059882bdb595e3dbb91650c9b0b8cce Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Mon, 2 Aug 2021 18:12:57 -0400 Subject: [PATCH] LP#1938835: customizable staff portal - schema, IDL, and seed data This patch adds two new database tables and corresponding IDL classes: * config.ui_staff_portal_page_entry_type (types of portal widgets) * config.ui_staff_portal_page_entry (entries/widgets for the portal) It also adds a new permission, ADMIN_STAFF_PORTAL_PAGE, for managing the new entries, seed data for the stock portal, and a grid setting for the portal admin interface. Sponsored-by: Pioneer Library System Signed-off-by: Galen Charlton Signed-off-by: Mike Rylander --- Open-ILS/examples/fm_IDL.xml | 38 ++++++++++++++++++ Open-ILS/src/sql/Pg/002.schema.config.sql | 17 ++++++++ Open-ILS/src/sql/Pg/800.fkeys.sql | 5 +++ Open-ILS/src/sql/Pg/950.data.seed-values.sql | 46 ++++++++++++++++++++-- .../Pg/upgrade/XXXX.schema.portal_page_table.sql | 34 ++++++++++++++++ .../Pg/upgrade/YYYY.data.default_portal_page.sql | 34 ++++++++++++++++ .../sql/Pg/upgrade/ZZZZ.data.portal_admin_perm.sql | 8 ++++ 7 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 Open-ILS/src/sql/Pg/upgrade/XXXX.schema.portal_page_table.sql create mode 100644 Open-ILS/src/sql/Pg/upgrade/YYYY.data.default_portal_page.sql create mode 100644 Open-ILS/src/sql/Pg/upgrade/ZZZZ.data.portal_admin_perm.sql diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 1e379ed9f3..eb915c1419 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -13901,6 +13901,44 @@ SELECT usr, + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Open-ILS/src/sql/Pg/002.schema.config.sql b/Open-ILS/src/sql/Pg/002.schema.config.sql index 07fe6ccd7e..f49c1dec42 100644 --- a/Open-ILS/src/sql/Pg/002.schema.config.sql +++ b/Open-ILS/src/sql/Pg/002.schema.config.sql @@ -1383,4 +1383,21 @@ CREATE TABLE config.geolocation_service ( api_key TEXT ); +CREATE TABLE config.ui_staff_portal_page_entry_type ( + code TEXT PRIMARY KEY, + label TEXT NOT NULL +); + +CREATE TABLE config.ui_staff_portal_page_entry ( + id SERIAL PRIMARY KEY, + page_col INTEGER NOT NULL, + col_pos INTEGER NOT NULL, + entry_type TEXT NOT NULL, -- REFERENCES config.ui_staff_portal_page_entry_type(code) + label TEXT, + image_url TEXT, + target_url TEXT, + entry_text TEXT, + owner INT NOT NULL -- REFERENCES actor.org_unit (id) +); + COMMIT; diff --git a/Open-ILS/src/sql/Pg/800.fkeys.sql b/Open-ILS/src/sql/Pg/800.fkeys.sql index 6ddf4cc326..9fdb93305f 100644 --- a/Open-ILS/src/sql/Pg/800.fkeys.sql +++ b/Open-ILS/src/sql/Pg/800.fkeys.sql @@ -269,4 +269,9 @@ ALTER TABLE config.print_template ADD CONSTRAINT cpt_owner_fkey ALTER TABLE config.geolocation_service ADD CONSTRAINT cgs_owner_fkey FOREIGN KEY (owner) REFERENCES actor.org_unit(id) DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE config.ui_staff_portal_page_entry ADD CONSTRAINT cusppe_entry_type_fkey + FOREIGN KEY (entry_type) REFERENCES config.ui_staff_portal_page_entry_type(code) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE config.ui_staff_portal_page_entry ADD CONSTRAINT cusppe_owner_fkey + FOREIGN KEY (owner) REFERENCES actor.org_unit(id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + COMMIT; diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index 0da9827519..0ca785a758 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -1964,10 +1964,11 @@ INSERT INTO permission.perm_list ( id, code, description ) VALUES ( 634, 'UPDATE_RECORD_NOTE', oils_i18n_gettext(634, 'Allow the user to update a record note', 'ppl', 'description')), ( 635, 'DELETE_RECORD_NOTE', oils_i18n_gettext(635, - 'Allow the user to delete a record note', 'ppl', 'description')) + 'Allow the user to delete a record note', 'ppl', 'description')), + ( 636, 'ADMIN_STAFF_PORTAL_PAGE', oils_i18n_gettext( 636, + 'Update the staff client portal page', 'ppl', 'description' )) ; - SELECT SETVAL('permission.perm_list_id_seq'::TEXT, 1000); INSERT INTO permission.grp_tree (id, name, parent, description, perm_interval, usergroup, application_perm) VALUES @@ -22079,4 +22080,43 @@ VALUES ( 'Grid Config: eg.grid.cat.bucket.batch_hold.list', 'cwst', 'label' ) -); \ No newline at end of file +); + +INSERT INTO config.ui_staff_portal_page_entry_type (code, label) +VALUES + ('link', oils_i18n_gettext('link', 'Link', 'cusppet', 'label')), + ('menuitem', oils_i18n_gettext('menuitem', 'Menu Item', 'cusppet', 'label')), + ('text', oils_i18n_gettext('text', 'Text and/or HTML', 'cusppet', 'label')), + ('header', oils_i18n_gettext('header', 'Header', 'cusppet', 'label')), + ('catalogsearch', oils_i18n_gettext('catalogsearch', 'Catalog Search Box', 'cusppet', 'label')); + +INSERT INTO config.ui_staff_portal_page_entry + (id, page_col, col_pos, entry_type, label, image_url, target_url, owner) +VALUES + ( 1, 1, 0, 'header', oils_i18n_gettext( 1, 'Circulation and Patrons', 'cusppe', 'label'), NULL, NULL, 1) +, ( 2, 1, 1, 'menuitem', oils_i18n_gettext( 2, 'Check Out Items', 'cusppe', 'label'), '/images/portal/forward.png', '/eg/staff/circ/patron/bcsearch', 1) +, ( 3, 1, 2, 'menuitem', oils_i18n_gettext( 3, 'Check In Items', 'cusppe', 'label'), '/images/portal/back.png', '/eg/staff/circ/checkin/index', 1) +, ( 4, 1, 3, 'menuitem', oils_i18n_gettext( 4, 'Search For Patron By Name', 'cusppe', 'label'), '/images/portal/retreivepatron.png', '/eg/staff/circ/patron/search', 1) +, ( 5, 2, 0, 'header', oils_i18n_gettext( 5, 'Item Search and Cataloging', 'cusppe', 'label'), NULL, NULL, 1) +, ( 6, 2, 1, 'catalogsearch', oils_i18n_gettext( 6, 'Search Catalog', 'cusppe', 'label'), NULL, NULL, 1) +, ( 7, 2, 2, 'menuitem', oils_i18n_gettext( 7, 'Record Buckets', 'cusppe', 'label'), '/images/portal/bucket.png', '/eg/staff/cat/bucket/record/', 1) +, ( 8, 2, 3, 'menuitem', oils_i18n_gettext( 8, 'Item Buckets', 'cusppe', 'label'), '/images/portal/bucket.png', '/eg/staff/cat/bucket/copy/', 1) +, ( 9, 3, 0, 'header', oils_i18n_gettext( 9, 'Administration', 'cusppe', 'label'), NULL, NULL, 1) +, (10, 3, 1, 'link', oils_i18n_gettext(10, 'Evergreen Documentation', 'cusppe', 'label'), '/images/portal/helpdesk.png', 'https://docs.evergreen-ils.org', 1) +, (11, 3, 2, 'menuitem', oils_i18n_gettext(11, 'Workstation Administration', 'cusppe', 'label'), '/images/portal/helpdesk.png', '/eg/staff/admin/workstation/index', 1) +, (12, 3, 3, 'menuitem', oils_i18n_gettext(12, 'Reports', 'cusppe', 'label'), '/images/portal/reports.png', '/eg/staff/reporter/legacy/main', 1) +; + +SELECT setval('config.ui_staff_portal_page_entry_id_seq', 100); + + +INSERT INTO config.workstation_setting_type (name, grp, datatype, label) +VALUES ( + 'eg.grid.admin.config.ui_staff_portal_page_entry', 'gui', 'object', + oils_i18n_gettext( + 'eg.grid.admin.config.ui_staff_portal_page_entry', + 'Grid Config: admin.config.ui_staff_portal_page_entry', + 'cwst', 'label' + ) +); + diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.portal_page_table.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.portal_page_table.sql new file mode 100644 index 0000000000..41e872c9b2 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.portal_page_table.sql @@ -0,0 +1,34 @@ +BEGIN; + +CREATE TABLE config.ui_staff_portal_page_entry_type ( + code TEXT PRIMARY KEY, + label TEXT NOT NULL +); + +INSERT INTO config.ui_staff_portal_page_entry_type (code, label) +VALUES + ('link', oils_i18n_gettext('link', 'Link', 'cusppet', 'label')), + ('menuitem', oils_i18n_gettext('menuitem', 'Menu Item', 'cusppet', 'label')), + ('text', oils_i18n_gettext('text', 'Text and/or HTML', 'cusppet', 'label')), + ('header', oils_i18n_gettext('header', 'Header', 'cusppet', 'label')), + ('catalogsearch', oils_i18n_gettext('catalogsearch', 'Catalog Search Box', 'cusppet', 'label')); + + +CREATE TABLE config.ui_staff_portal_page_entry ( + id SERIAL PRIMARY KEY, + page_col INTEGER NOT NULL, + col_pos INTEGER NOT NULL, + entry_type TEXT NOT NULL, -- REFERENCES config.ui_staff_portal_page_entry_type(code) + label TEXT, + image_url TEXT, + target_url TEXT, + entry_text TEXT, + owner INT NOT NULL -- REFERENCES actor.org_unit (id) +); + +ALTER TABLE config.ui_staff_portal_page_entry ADD CONSTRAINT cusppe_entry_type_fkey + FOREIGN KEY (entry_type) REFERENCES config.ui_staff_portal_page_entry_type(code) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE config.ui_staff_portal_page_entry ADD CONSTRAINT cusppe_owner_fkey + FOREIGN KEY (owner) REFERENCES actor.org_unit(id) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + +COMMIT; diff --git a/Open-ILS/src/sql/Pg/upgrade/YYYY.data.default_portal_page.sql b/Open-ILS/src/sql/Pg/upgrade/YYYY.data.default_portal_page.sql new file mode 100644 index 0000000000..4dbdd5202f --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/YYYY.data.default_portal_page.sql @@ -0,0 +1,34 @@ +BEGIN; + +INSERT INTO config.ui_staff_portal_page_entry + (id, page_col, col_pos, entry_type, label, image_url, target_url, owner) +VALUES + ( 1, 1, 0, 'header', oils_i18n_gettext( 1, 'Circulation and Patrons', 'cusppe', 'label'), NULL, NULL, 1) +, ( 2, 1, 1, 'menuitem', oils_i18n_gettext( 2, 'Check Out Items', 'cusppe', 'label'), '/images/portal/forward.png', '/eg/staff/circ/patron/bcsearch', 1) +, ( 3, 1, 2, 'menuitem', oils_i18n_gettext( 3, 'Check In Items', 'cusppe', 'label'), '/images/portal/back.png', '/eg/staff/circ/checkin/index', 1) +, ( 4, 1, 3, 'menuitem', oils_i18n_gettext( 4, 'Search For Patron By Name', 'cusppe', 'label'), '/images/portal/retreivepatron.png', '/eg/staff/circ/patron/search', 1) +, ( 5, 2, 0, 'header', oils_i18n_gettext( 5, 'Item Search and Cataloging', 'cusppe', 'label'), NULL, NULL, 1) +, ( 6, 2, 1, 'catalogsearch', oils_i18n_gettext( 6, 'Search Catalog', 'cusppe', 'label'), NULL, NULL, 1) +, ( 7, 2, 2, 'menuitem', oils_i18n_gettext( 7, 'Record Buckets', 'cusppe', 'label'), '/images/portal/bucket.png', '/eg/staff/cat/bucket/record/', 1) +, ( 8, 2, 3, 'menuitem', oils_i18n_gettext( 8, 'Item Buckets', 'cusppe', 'label'), '/images/portal/bucket.png', '/eg/staff/cat/bucket/copy/', 1) +, ( 9, 3, 0, 'header', oils_i18n_gettext( 9, 'Administration', 'cusppe', 'label'), NULL, NULL, 1) +, (10, 3, 1, 'link', oils_i18n_gettext(10, 'Evergreen Documentation', 'cusppe', 'label'), '/images/portal/helpdesk.png', 'https://docs.evergreen-ils.org', 1) +, (11, 3, 2, 'menuitem', oils_i18n_gettext(11, 'Workstation Administration', 'cusppe', 'label'), '/images/portal/helpdesk.png', '/eg/staff/admin/workstation/index', 1) +, (12, 3, 3, 'menuitem', oils_i18n_gettext(12, 'Reports', 'cusppe', 'label'), '/images/portal/reports.png', '/eg/staff/reporter/legacy/main', 1) +; + +SELECT setval('config.ui_staff_portal_page_entry_id_seq', 100); + + +INSERT INTO config.workstation_setting_type (name, grp, datatype, label) +VALUES ( + 'eg.grid.admin.config.ui_staff_portal_page_entry', 'gui', 'object', + oils_i18n_gettext( + 'eg.grid.admin.config.ui_staff_portal_page_entry', + 'Grid Config: admin.config.ui_staff_portal_page_entry', + 'cwst', 'label' + ) +); + +COMMIT; + diff --git a/Open-ILS/src/sql/Pg/upgrade/ZZZZ.data.portal_admin_perm.sql b/Open-ILS/src/sql/Pg/upgrade/ZZZZ.data.portal_admin_perm.sql new file mode 100644 index 0000000000..c9cbf209a7 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/ZZZZ.data.portal_admin_perm.sql @@ -0,0 +1,8 @@ +BEGIN; + +INSERT INTO permission.perm_list ( id, code, description ) VALUES +( 636, 'ADMIN_STAFF_PORTAL_PAGE', oils_i18n_gettext( 636, + 'Update the staff client portal page', 'ppl', 'description' )) +; + +COMMIT; -- 2.11.0