diff --git a/app/availableplugins/ApiConnector/src/Controller/ApiSourceEndpointsController.php b/app/availableplugins/ApiConnector/src/Controller/ApiSourceEndpointsController.php
index f9fe4da31..119202628 100644
--- a/app/availableplugins/ApiConnector/src/Controller/ApiSourceEndpointsController.php
+++ b/app/availableplugins/ApiConnector/src/Controller/ApiSourceEndpointsController.php
@@ -48,6 +48,14 @@ class ApiSourceEndpointsController extends StandardPluginController {
*/
public function beforeRender(\Cake\Event\EventInterface $event) {
+ $link = $this->getPrimaryLink(true);
+
+ if(!empty($link->value)) {
+ $this->set('vv_bc_parent_obj', $this->ApiSourceEndpoints->Apis->get($link->value));
+ $this->set('vv_bc_parent_displayfield', $this->ApiSourceEndpoints->Apis->getDisplayField());
+ $this->set('vv_bc_parent_primarykey', $this->ApiSourceEndpoints->Apis->getPrimaryKey());
+ }
+
$vv_obj = $this->viewBuilder()->getVar('vv_obj');
if(!empty($vv_obj->external_identity_source->api_source->id)) {
diff --git a/app/availableplugins/ApiConnector/src/Controller/ApiSourcesController.php b/app/availableplugins/ApiConnector/src/Controller/ApiSourcesController.php
index 75ff700c5..b779a9a65 100644
--- a/app/availableplugins/ApiConnector/src/Controller/ApiSourcesController.php
+++ b/app/availableplugins/ApiConnector/src/Controller/ApiSourcesController.php
@@ -29,6 +29,7 @@
namespace ApiConnector\Controller;
+use Cake\Event\EventInterface;
use Cake\Routing\Router;
use App\Controller\StandardPluginController;
@@ -38,4 +39,25 @@ class ApiSourcesController extends StandardPluginController {
'ApiSources.id' => 'asc'
]
];
+
+ /**
+ * Callback run prior to the request render.
+ *
+ * @param EventInterface $event Cake Event
+ *
+ * @return Response|void
+ * @since COmanage Registry v5.0.0
+ */
+
+ public function beforeRender(EventInterface $event) {
+ $link = $this->getPrimaryLink(true);
+
+ if(!empty($link->value)) {
+ $this->set('vv_bc_parent_obj', $this->ApiSources->ExternalIdentitySources->get($link->value));
+ $this->set('vv_bc_parent_displayfield', $this->ApiSources->ExternalIdentitySources->getDisplayField());
+ $this->set('vv_bc_parent_primarykey', $this->ApiSources->ExternalIdentitySources->getPrimaryKey());
+ }
+
+ return parent::beforeRender($event);
+ }
}
diff --git a/app/availableplugins/ApiConnector/src/Model/Table/ApiSourcesTable.php b/app/availableplugins/ApiConnector/src/Model/Table/ApiSourcesTable.php
index 0cb1f6d72..07bfdfdfa 100644
--- a/app/availableplugins/ApiConnector/src/Model/Table/ApiSourcesTable.php
+++ b/app/availableplugins/ApiConnector/src/Model/Table/ApiSourcesTable.php
@@ -42,7 +42,6 @@ class ApiSourcesTable extends Table {
use \App\Lib\Traits\PrimaryLinkTrait;
use \App\Lib\Traits\TableMetaTrait;
use \App\Lib\Traits\ValidationTrait;
- use \App\Lib\Traits\TabTrait;
/**
* Perform Cake Model initialization.
diff --git a/app/availableplugins/ApiConnector/templates/ApiSourceEndpoints/fields.inc b/app/availableplugins/ApiConnector/templates/ApiSourceEndpoints/fields.inc
index 909625d5f..e3b79cfa3 100644
--- a/app/availableplugins/ApiConnector/templates/ApiSourceEndpoints/fields.inc
+++ b/app/availableplugins/ApiConnector/templates/ApiSourceEndpoints/fields.inc
@@ -38,3 +38,11 @@ if(!empty($vv_push_endpoint)) {
$fields = [
'external_identity_source_id'
];
+
+$subnav = [
+ 'tabs' => ['Apis', 'ApiConnector.ApiSourceEndpoints'],
+ 'action' => [
+ 'Apis' => ['edit'],
+ 'ApiConnector.ApiSourceEndpoints' => ['edit']
+ ]
+];
diff --git a/app/availableplugins/ApiConnector/templates/ApiSources/fields.inc b/app/availableplugins/ApiConnector/templates/ApiSources/fields.inc
index 32722bfa7..e3178098d 100644
--- a/app/availableplugins/ApiConnector/templates/ApiSources/fields.inc
+++ b/app/availableplugins/ApiConnector/templates/ApiSources/fields.inc
@@ -38,3 +38,12 @@ $fields = [
'subtitle' => __d('api_connector', 'field.ApiSources.push_mode')
]
];
+
+$subnav = [
+ 'tabs' => ['ExternalIdentitySources', 'ApiConnector.ApiSources', 'ExternalIdentitySources@action.search'],
+ 'action' => [
+ 'ExternalIdentitySources' => ['edit', 'view', 'search'],
+ 'ApiConnector.ApiSources' => ['edit'],
+ 'ExternalIdentitySources@action.search' => [],
+ ],
+];
diff --git a/app/availableplugins/FileConnector/src/Controller/FileProvisionersController.php b/app/availableplugins/FileConnector/src/Controller/FileProvisionersController.php
index 3fe2ebd9e..fed47b8e2 100644
--- a/app/availableplugins/FileConnector/src/Controller/FileProvisionersController.php
+++ b/app/availableplugins/FileConnector/src/Controller/FileProvisionersController.php
@@ -30,6 +30,7 @@
namespace FileConnector\Controller;
use App\Controller\StandardPluginController;
+use Cake\Event\EventInterface;
class FileProvisionersController extends StandardPluginController {
protected array $paginate = [
@@ -37,4 +38,25 @@ class FileProvisionersController extends StandardPluginController {
'FileProvisioners.id' => 'asc'
]
];
+
+ /**
+ * Callback run prior to the request render.
+ *
+ * @param EventInterface $event Cake Event
+ *
+ * @return Response|void
+ * @since COmanage Registry v5.0.0
+ */
+
+ public function beforeRender(EventInterface $event) {
+ $link = $this->getPrimaryLink(true);
+
+ if(!empty($link->value)) {
+ $this->set('vv_bc_parent_obj', $this->FileProvisioners->ProvisioningTargets->get($link->value));
+ $this->set('vv_bc_parent_displayfield', $this->FileProvisioners->ProvisioningTargets->getDisplayField());
+ $this->set('vv_bc_parent_primarykey', $this->FileProvisioners->ProvisioningTargets->getPrimaryKey());
+ }
+
+ return parent::beforeRender($event);
+ }
}
diff --git a/app/availableplugins/FileConnector/src/Model/Table/FileSourcesTable.php b/app/availableplugins/FileConnector/src/Model/Table/FileSourcesTable.php
index 5010d7267..ee57ddd7a 100644
--- a/app/availableplugins/FileConnector/src/Model/Table/FileSourcesTable.php
+++ b/app/availableplugins/FileConnector/src/Model/Table/FileSourcesTable.php
@@ -47,7 +47,6 @@ class FileSourcesTable extends Table {
use \App\Lib\Traits\PrimaryLinkTrait;
use \App\Lib\Traits\TableMetaTrait;
use \App\Lib\Traits\ValidationTrait;
- use \App\Lib\Traits\TabTrait;
// Cache of the field configuration
protected $fieldCfg = null;
@@ -89,23 +88,6 @@ public function initialize(array $config): void {
]
]);
- // All the tabs share the same configuration in the ModelTable file
- $this->setTabsConfig(
- [
- // Ordered list of Tabs
- 'tabs' => ['ExternalIdentitySources', 'FileConnector.FileSources', 'ExternalIdentitySources@action.search'],
- // What actions will include the subnavigation header
- 'action' => [
- // If a model renders in a subnavigation mode in edit/view mode, it cannot
- // render in index mode for the same use case/context
- // XXX edit should go first.
- 'ExternalIdentitySources' => ['edit', 'view', 'search'],
- 'FileConnector.FileSources' => ['edit'],
- 'ExternalIdentitySources@action.search' => [],
- ],
- ]
- );
-
$this->setPermissions([
// Actions that operate over an entity (ie: require an $id)
'entity' => [
diff --git a/app/availableplugins/FileConnector/templates/FileProvisioners/fields.inc b/app/availableplugins/FileConnector/templates/FileProvisioners/fields.inc
index ffecf0e93..c5eb0f373 100644
--- a/app/availableplugins/FileConnector/templates/FileProvisioners/fields.inc
+++ b/app/availableplugins/FileConnector/templates/FileProvisioners/fields.inc
@@ -27,4 +27,12 @@
$fields = [
'filename'
-];
\ No newline at end of file
+];
+
+$subnav = [
+ 'tabs' => ['ProvisioningTargets', 'FileConnector.FileProvisioners'],
+ 'action' => [
+ 'ProvisioningTargets' => ['edit'],
+ 'FileConnector.FileProvisioners' => ['edit']
+ ]
+];
diff --git a/app/availableplugins/FileConnector/templates/FileSources/fields.inc b/app/availableplugins/FileConnector/templates/FileSources/fields.inc
index 3fbde4e40..a9f4af3de 100644
--- a/app/availableplugins/FileConnector/templates/FileSources/fields.inc
+++ b/app/availableplugins/FileConnector/templates/FileSources/fields.inc
@@ -32,3 +32,12 @@ $fields = [
'threshold_check',
'threshold_override',
];
+
+$subnav = [
+ 'tabs' => ['ExternalIdentitySources', 'FileConnector.FileSources', 'ExternalIdentitySources@action.search'],
+ 'action' => [
+ 'ExternalIdentitySources' => ['edit', 'view', 'search'],
+ 'FileConnector.FileSources' => ['edit'],
+ 'ExternalIdentitySources@action.search' => [],
+ ],
+];
diff --git a/app/availableplugins/KerberosConnector/src/Controller/KerberosServersController.php b/app/availableplugins/KerberosConnector/src/Controller/KerberosServersController.php
index 089b2ef8e..e818c8cb8 100644
--- a/app/availableplugins/KerberosConnector/src/Controller/KerberosServersController.php
+++ b/app/availableplugins/KerberosConnector/src/Controller/KerberosServersController.php
@@ -30,6 +30,7 @@
namespace KerberosConnector\Controller;
use App\Controller\StandardPluginController;
+use Cake\Event\EventInterface;
class KerberosServersController extends StandardPluginController {
protected array $paginate = [
@@ -37,4 +38,25 @@ class KerberosServersController extends StandardPluginController {
'KerberosServers.hostname' => 'asc'
]
];
+
+ /**
+ * Callback run prior to the request render.
+ *
+ * @param EventInterface $event Cake Event
+ *
+ * @return Response|void
+ * @since COmanage Registry v5.0.0
+ */
+
+ public function beforeRender(EventInterface $event) {
+ $link = $this->getPrimaryLink(true);
+
+ if(!empty($link->value)) {
+ $this->set('vv_bc_parent_obj', $this->KerberosServers->Servers->get($link->value));
+ $this->set('vv_bc_parent_displayfield', $this->KerberosServers->Servers->getDisplayField());
+ $this->set('vv_bc_parent_primarykey', $this->KerberosServers->Servers->getPrimaryKey());
+ }
+
+ return parent::beforeRender($event);
+ }
}
diff --git a/app/availableplugins/KerberosConnector/templates/KerberosServers/fields.inc b/app/availableplugins/KerberosConnector/templates/KerberosServers/fields.inc
index d4f28daf4..8b9f5afbc 100644
--- a/app/availableplugins/KerberosConnector/templates/KerberosServers/fields.inc
+++ b/app/availableplugins/KerberosConnector/templates/KerberosServers/fields.inc
@@ -33,3 +33,10 @@ $fields = [
'keytab_path'
];
+$subnav = [
+ 'tabs' => ['Servers', 'KerberosConnector.KerberosServers'],
+ 'action' => [
+ 'Servers' => ['edit'],
+ 'KerberosConnector.KerberosServers' => ['edit']
+ ]
+];
diff --git a/app/availableplugins/PasswordAuthenticator/src/Controller/PasswordAuthenticatorsController.php b/app/availableplugins/PasswordAuthenticator/src/Controller/PasswordAuthenticatorsController.php
index 06dba901f..cf0692b5b 100644
--- a/app/availableplugins/PasswordAuthenticator/src/Controller/PasswordAuthenticatorsController.php
+++ b/app/availableplugins/PasswordAuthenticator/src/Controller/PasswordAuthenticatorsController.php
@@ -30,6 +30,7 @@
namespace PasswordAuthenticator\Controller;
use App\Controller\StandardPluginController;
+use Cake\Event\EventInterface;
class PasswordAuthenticatorsController extends StandardPluginController {
protected array $paginate = [
@@ -37,4 +38,25 @@ class PasswordAuthenticatorsController extends StandardPluginController {
'PasswordAuthenticators.id' => 'asc'
]
];
+
+ /**
+ * Callback run prior to the request render.
+ *
+ * @param EventInterface $event Cake Event
+ *
+ * @return Response|void
+ * @since COmanage Registry v5.0.0
+ */
+
+ public function beforeRender(EventInterface $event) {
+ $link = $this->getPrimaryLink(true);
+
+ if(!empty($link->value)) {
+ $this->set('vv_bc_parent_obj', $this->PasswordAuthenticators->Authenticators->get($link->value));
+ $this->set('vv_bc_parent_displayfield', $this->PasswordAuthenticators->Authenticators->getDisplayField());
+ $this->set('vv_bc_parent_primarykey', $this->PasswordAuthenticators->Authenticators->getPrimaryKey());
+ }
+
+ return parent::beforeRender($event);
+ }
}
diff --git a/app/availableplugins/PasswordAuthenticator/templates/PasswordAuthenticators/fields.inc b/app/availableplugins/PasswordAuthenticator/templates/PasswordAuthenticators/fields.inc
index bf1640b56..59452354b 100644
--- a/app/availableplugins/PasswordAuthenticator/templates/PasswordAuthenticators/fields.inc
+++ b/app/availableplugins/PasswordAuthenticator/templates/PasswordAuthenticators/fields.inc
@@ -34,6 +34,14 @@ $fields = [
'format_plaintext'
];
+$subnav = [
+ 'tabs' => ['Authenticators', 'PasswordAuthenticator.PasswordAuthenticators'],
+ 'action' => [
+ 'Authenticators' => ['edit'],
+ 'PasswordAuthenticator.PasswordAuthenticators' => ['edit']
+ ]
+]
+
?>
+
+ true
-];
-*/
+$subnav = 'groups';
diff --git a/app/templates/Groups/columns.inc b/app/templates/Groups/columns.inc
index aa12d515d..39001dfec 100644
--- a/app/templates/Groups/columns.inc
+++ b/app/templates/Groups/columns.inc
@@ -45,9 +45,6 @@ $indexColumns = [
]
];
-// $topLinks appear as an upper right menu
-$topLinks = [];
-
// $rowActions appear as row-level menu items in the index view gear icon
$rowActions = [
[
diff --git a/app/templates/Groups/fields.inc b/app/templates/Groups/fields.inc
index 51fb95aae..597dda500 100644
--- a/app/templates/Groups/fields.inc
+++ b/app/templates/Groups/fields.inc
@@ -40,6 +40,8 @@ $fields = [
'nesting_mode_all' => $options
];
+$subnav = 'groups';
+
if(!empty($parents)) {
$fields['parent_id'] = [
'fieldLabel' => __d('field', 'parent_id'),
diff --git a/app/templates/IdentifierAssignments/columns.inc b/app/templates/IdentifierAssignments/columns.inc
index da7f44414..f29879787 100644
--- a/app/templates/IdentifierAssignments/columns.inc
+++ b/app/templates/IdentifierAssignments/columns.inc
@@ -73,11 +73,3 @@ $rowActions = [
'icon' => 'electrical_services'
]
];
-
-/*
-// When the $bulkActions variable exists in a columns.inc config, the "Bulk edit" switch will appear in the index.
-$bulkActions = [
- // TODO: develop bulk actions. For now, use a placeholder.
- 'delete' => true
-];
-*/
\ No newline at end of file
diff --git a/app/templates/IdentifierAssignments/fields.inc b/app/templates/IdentifierAssignments/fields.inc
index 662a4b119..73294910a 100644
--- a/app/templates/IdentifierAssignments/fields.inc
+++ b/app/templates/IdentifierAssignments/fields.inc
@@ -37,6 +37,11 @@ $fields = [
'allow_empty',
'ordr'
];
+
+$fields = array_merge($fields, include(ROOT . DS . 'templates' . DS . 'Standard/metadata.inc'));
+
+$subnav = 'standard';
+
?>