diff --git a/app/resources/locales/en_US/information.po b/app/resources/locales/en_US/information.po
index 73edccf50..6a05a1458 100644
--- a/app/resources/locales/en_US/information.po
+++ b/app/resources/locales/en_US/information.po
@@ -55,16 +55,22 @@ msgid "pagination.format"
msgstr "Page {{page}} of {{pages}}, Viewing {{start}}-{{end}} of {{count}}"
msgid "ExternalIdentities.source"
-msgstr "This External Identity was created from {0} ({1})"
+msgstr "This External Identity was created from {0}."
+
+msgid "ExternalIdentitySources.records"
+msgstr "Source Records"
msgid "ExternalIdentitySources.retrieve"
-msgstr "This is the current record available directly from the source. To view the latest record retrieved and cached by Registry, click View External Identity Source Record."
+msgstr "This is the current record retrieved directly from the source. View the latest record cached by Registry."
+
+msgid "ExternalIdentitySources.retrieve.notSynced"
+msgstr "This is the current record available directly from the source."
msgid "ExternalIdentitySourceRecords.metadata"
msgstr "Metadata"
msgid "ExternalIdentitySourceRecords.view"
-msgstr "This is the latest record retrieved from the source, as cached by Registry. To view the current record directly from the source, select Retrieve from External Identity Source."
+msgstr "This is the latest record from the source as cached by Registry. Retrieve the current record directly from the source."
msgid "ExternalIdentitySources.search.attrs.none"
msgstr "The External Identity Source cannot be searched."
diff --git a/app/src/Model/Table/ExternalIdentityRolesTable.php b/app/src/Model/Table/ExternalIdentityRolesTable.php
index 86132973c..b24377067 100644
--- a/app/src/Model/Table/ExternalIdentityRolesTable.php
+++ b/app/src/Model/Table/ExternalIdentityRolesTable.php
@@ -100,6 +100,12 @@ public function initialize(array $config): void {
'AdHocAttributes',
'TelephoneNumbers'
]);
+
+ $this->setViewContains([
+ 'Addresses',
+ 'AdHocAttributes',
+ 'TelephoneNumbers'
+ ]);
$this->setAutoViewVars([
'statuses' => [
diff --git a/app/templates/ExtIdentitySourceRecords/fields-nav.inc b/app/templates/ExtIdentitySourceRecords/fields-nav.inc
new file mode 100644
index 000000000..8ea739688
--- /dev/null
+++ b/app/templates/ExtIdentitySourceRecords/fields-nav.inc
@@ -0,0 +1,66 @@
+external_identity_id)) {
+ $topLinks[] = [
+ 'icon' => 'visibility',
+ 'order' => 'Default',
+ 'label' => __d('operation', 'view.a', [__d('controller', 'ExternalIdentities', [1])]),
+ 'link' => [
+ 'controller' => 'external_identities',
+ 'action' => 'view',
+ $vv_obj->external_identity_id
+ ],
+ 'skipPermsCheck' => true
+ ];
+ $topLinks[] = [
+ 'icon' => 'visibility',
+ 'order' => 'Default',
+ 'label' => __d('operation', 'ExternalIdentitySourceRecords.retrieve'),
+ 'link' => [
+ 'controller' => 'external_identity_sources',
+ 'action' => 'retrieve',
+ $vv_obj->external_identity_source_id,
+ '?' => [
+ 'source_key' => $vv_obj->source_key
+ ]
+ ],
+ 'skipPermsCheck' => true
+ ];
+}
+
+$subnav = [
+ 'name' => 'plugin',
+ 'active' => 'search'
+];
+
+if(!empty($vv_obj->external_identity_source_id)) {
+ $subnav['tabsId'] = $vv_obj->external_identity_source_id;
+ $subnav['tabsController'] = 'external_identity_sources';
+ $subnav['tabsSupertitle'] = $vv_obj->external_identity_source->description;
+}
\ No newline at end of file
diff --git a/app/templates/ExtIdentitySourceRecords/fields.inc b/app/templates/ExtIdentitySourceRecords/fields.inc
index 68be3473a..59d62580c 100644
--- a/app/templates/ExtIdentitySourceRecords/fields.inc
+++ b/app/templates/ExtIdentitySourceRecords/fields.inc
@@ -24,43 +24,25 @@
* @since COmanage Registry v5.0.0
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/
-?>
-
-= __d('information', 'ExternalIdentitySourceRecords.view'); ?>
-
-external_identity_source_id)): ?>
-- = $this->Html->link(
- __d('operation', 'ExternalIdentitySourceRecords.retrieve'),
- [
- 'controller' => 'external-identity-sources',
- 'action' => 'retrieve',
- $vv_obj->external_identity_source_id,
- '?' => [
- 'source_key' => $vv_obj->source_key
- ]
- ]
- ); ?>
-- = $this->Html->link(
- $vv_obj->external_identity_source->description,
- [
- 'controller' => 'external-identity-sources',
- 'action' => 'edit',
- $vv_obj->external_identity_source_id
- ]
- ); ?>
-
-external_identity_id)): ?>
-- = $this->Html->link(
- __d('controller', 'ExternalIdentities', [1]),
- [
- 'controller' => 'external-identities',
- 'action' => 'view',
- $vv_obj->external_identity_id
- ]
- ); ?>
-
-
-Url->build(
+ [
+ 'controller' => 'external_identity_sources',
+ 'action' => 'retrieve',
+ $vv_obj->external_identity_source_id,
+ '?' => [
+ 'source_key' => $vv_obj->source_key
+ ]
+ ]
+ )
+ ]
+);
+
+print $this->Alert->alert($noticeText, 'information', false);
// This view does not support add or edit
if($vv_action == 'view') {
diff --git a/app/templates/ExternalIdentities/fields-nav.inc b/app/templates/ExternalIdentities/fields-nav.inc
index 745e3b332..5a0533b3b 100644
--- a/app/templates/ExternalIdentities/fields-nav.inc
+++ b/app/templates/ExternalIdentities/fields-nav.inc
@@ -54,9 +54,33 @@ $topLinks = [
'external_identity_id' => $vv_obj->id
]
],
- 'class' => ''
+ 'skipPermsCheck' => true
+ ],
+ [
+ 'icon' => 'visibility',
+ 'order' => 'Default',
+ 'label' => __d('operation', 'view.a', [__d('controller', 'ExtIdentitySourceRecords', 1)]),
+ 'link' => [
+ 'controller' => 'ext_identity_source_records',
+ 'action' => 'index',
+ $vv_obj->ext_identity_source_records[0]->id
+ ]
]
];
+
+if($vv_action == 'view' && !empty($vv_obj->ext_identity_source_records[0])) {
+ $topLinks[] = [
+ 'icon' => 'visibility',
+ 'order' => 'Default',
+ 'label' => __d('operation', 'view.a', [__d('controller', 'ExtIdentitySourceRecords', 1)]),
+ 'link' => [
+ 'controller' => 'ext-identity-source-records',
+ 'action' => 'view',
+ $vv_obj->ext_identity_source_records[0]->id
+ ],
+ 'skipPermsCheck' => true
+ ];
+}
// $addMenuLinks is also given slightly different treatment from the typical $topLinks found in most views:
// it is a page-global menu used for adding MVEAs and is given special treatment in element/mveaCanvas.php.
diff --git a/app/templates/ExternalIdentities/fields.inc b/app/templates/ExternalIdentities/fields.inc
index 7b4a573c5..cb7f442c7 100644
--- a/app/templates/ExternalIdentities/fields.inc
+++ b/app/templates/ExternalIdentities/fields.inc
@@ -28,7 +28,8 @@
// This view will not support add/edit
if($vv_action == 'add' || $vv_action == 'edit' || $vv_action == 'view') {
if(!empty($vv_obj->ext_identity_source_records[0])) {
- print __d(
+
+ $noticeText = __d(
'information',
'ExternalIdentities.source',
[
@@ -39,17 +40,11 @@ if($vv_action == 'add' || $vv_action == 'edit' || $vv_action == 'view') {
'action' => 'edit',
$vv_obj->ext_identity_source_records[0]->external_identity_source->id
]
- ),
- $this->Html->link(
- __d('operation', 'view.a', [__d('controller', 'ExtIdentitySourceRecords', 1)]),
- [
- 'controller' => 'ext-identity-source-records',
- 'action' => 'view',
- $vv_obj->ext_identity_source_records[0]->id
- ]
)
]
);
+
+ print $this->Alert->alert($noticeText, 'information', false);
}
print $this->Field->control('status', ['empty' => false]);
diff --git a/app/templates/ExternalIdentitySources/retrieve.php b/app/templates/ExternalIdentitySources/retrieve.php
index d872ddd46..b50364847 100644
--- a/app/templates/ExternalIdentitySources/retrieve.php
+++ b/app/templates/ExternalIdentitySources/retrieve.php
@@ -87,16 +87,25 @@
-
-
-
- report_problem
-
-
- = __d('information', 'ExternalIdentitySources.retrieve'); ?>
-
-
-
+id)) {
+ $noticeText = __d(
+ 'information',
+ 'ExternalIdentitySources.retrieve',
+ [
+ $this->Url->build(
+ [
+ 'controller' => 'ext-identity-source-records',
+ 'action' => 'view',
+ $vv_external_identity_record->id
+ ]
+ )
+ ]
+ );
+ }
+?>
+= $this->Alert->alert($noticeText, 'information', false) ?>
diff --git a/app/templates/ExternalIdentitySources/search.php b/app/templates/ExternalIdentitySources/search.php
index 585ad1269..a7b841cec 100644
--- a/app/templates/ExternalIdentitySources/search.php
+++ b/app/templates/ExternalIdentitySources/search.php
@@ -42,16 +42,7 @@
-
+ = $this->Alert->alert(__d('information', 'ExternalIdentitySources.search.attrs.none'), 'information', false) ?>
$this->Menu->getMenuOrder($t['order']),
'icon' => $this->Menu->getMenuIcon($t['icon']),
diff --git a/app/templates/element/subnavigation.php b/app/templates/element/subnavigation.php
index 5f4c05f9a..0a6f50907 100644
--- a/app/templates/element/subnavigation.php
+++ b/app/templates/element/subnavigation.php
@@ -51,7 +51,11 @@
// XXX we might produce the $vv_primary_link for edit views so the approach below could be deprecated
// XXX $vv_primary_link_obj is the equivalent for plugins however
$curId = $vv_obj->id;
- if(!empty($vv_person_id)) {
+ if(!empty($tabsId) && !empty($tabsController)) {
+ // these have been explicitly set in the $subnav array in fields-nav.inc, so just use them.
+ $curId = $tabsId;
+ $navController = $tabsController;
+ } elseif(!empty($vv_person_id)) {
$curId = $vv_person_id;
} elseif($active == 'plugin' && !empty($vv_primary_link_obj) && !empty($vv_primary_link_model)) {
$curId = $vv_primary_link_obj->id;
@@ -83,7 +87,10 @@
}
$supertitle = __d('information','global.title.none');
-if($active == 'plugin' && !empty($vv_bc_parent_obj)) {
+if(!empty($tabsSupertitle)) {
+ // this has been explicitly set in the $subnav array in fields-nav.inc, so just use it.
+ $supertitle = $tabsSupertitle;
+} elseif($active == 'plugin' && !empty($vv_bc_parent_obj)) {
$supertitle = $vv_bc_parent_obj->$vv_bc_parent_displayfield;
} elseif(!empty($vv_person_name)) {
$supertitle = $vv_person_name->full_name;
@@ -349,13 +356,16 @@
);
?>
-
+
Html->link(
- __d('operation', 'ExternalIdentitySources.search'),
+ __d('information', 'ExternalIdentitySources.records'),
$navUrl,
['class' => $linkClass]
);
diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css
index 23f84711a..6c5d48340 100644
--- a/app/webroot/css/co-base.css
+++ b/app/webroot/css/co-base.css
@@ -424,7 +424,7 @@ body.cos.select #top-bar {
.co-alert.alert-information {
background-color: var(--cmg-color-highlight-004);
color: var(--cmg-color-highlight-003);
- border-color: var(--cmg-color-link);
+ border-color: var(--cmg-color-highlight-017);
}
.co-alert .alert-icon {
margin-right: 0.1rem;
@@ -432,6 +432,9 @@ body.cos.select #top-bar {
.co-alert .alert-title-text {
margin-right: 0.25em;
}
+.co-alert a {
+ text-decoration: underline;
+}
/* Alerts in the add-edit form: */
ul.form-list li.alert-banner {
display: block;
diff --git a/app/webroot/css/co-color.css b/app/webroot/css/co-color.css
index 1bf887a24..1187b38b7 100644
--- a/app/webroot/css/co-color.css
+++ b/app/webroot/css/co-color.css
@@ -86,6 +86,8 @@
--cmg-color-highlight-015: #842029; /* alert: danger text color (red) */
--cmg-color-highlight-016: #f8cece; /* alert: danger border color (red) */
+ --cmg-color-highlight-017: #cee6f8; /* alert: info border color (blue) */
+
/* Duet Date Picker Colors & Settings */
--duet-color-primary: var(--cmg-color-btn-bg-001);
--duet-color-text: var(--cmg-color-body-txt);
diff --git a/app/webroot/js/comanage/components/mvea/mvea-item.js b/app/webroot/js/comanage/components/mvea/mvea-item.js
index 1eb4d841c..bc4666aa2 100644
--- a/app/webroot/js/comanage/components/mvea/mvea-item.js
+++ b/app/webroot/js/comanage/components/mvea/mvea-item.js
@@ -139,7 +139,7 @@ export default {