Skip to content
Permalink
Browse files

Fix up menus and information architecture to improve navigability. Fi… (

#2, CO-2141)

* Fix up menus and information architecture to improve navigability. First pass refactoring of layout and CSS components to generalize and bring in line with Registry 4.0 and Registry Future. Remove unused libraries, and upgrade Bootstrap and jQuery. (CO-2141 / CO-1948 / CO-2133)

* Update localization strings and ensure breadcrumbs and the hamburger menu appear only when they should (CO-2141)

* Fix logic for breadcrumb visibility (CO-2141)
  • Loading branch information
arlen committed Sep 17, 2021
1 parent 636aa82 commit 01ce3fbff723acee38b806461b60f895461b9dc8
@@ -191,6 +191,7 @@ class AuthorizationComponent extends Component {
'matchgrid_settings' => $platformAdmin || $mgAdmin,
'rules' => $platformAdmin || $mgAdmin,
'systems_of_record' => $platformAdmin || $mgAdmin,
'reconcile' => $platformAdmin || $mgAdmin || $recMgr,
// Permissions specific to a matchgrid
'gridroles' => $perms['matchgrids'],
// Overall permission to manage the matchgrids
@@ -478,16 +478,21 @@ msgid "match.home.welcome"
msgstr "Welcome to {0}."

### Informational Messages
msgid "match.in.matchgrid.display"
msgstr "Display all records associated with this Matchgrid."

msgid "match.in.matchgrid.reconcile"
msgstr "Resolve matching records when COmanage determines the same person may be coming from multiple systems of record."

msgid "match.in.matchgrid.select"
msgstr "Select the Matchgrid you'd like to manage. A Matchgrid is used to match identity records across multiple authoritative systems of record."

msgid "match.in.matchgrids.none"
msgstr "There are no matchgrids currently defined."

msgid "match.in.pagination.format"
msgstr "Page {{page}} of {{pages}}, Viewing {{start}}-{{end}} of {{count}}"

### Menu Items
msgid "match.me.platform"
msgstr "Platform"

### Operations (Commands)
msgid "match.op.add.a"
msgstr "Add New {0}"
@@ -504,6 +509,9 @@ msgstr "Build"
msgid "match.op.build.confirm"
msgstr "Are you sure you wish to (re)build this matchgrid?"

msgid "match.op.configure.a"
msgstr "Configure {0}"

msgid "match.op.delete"
msgstr "Delete"

@@ -513,6 +521,9 @@ msgstr "Are you sure you wish to delete this record ({0})?"
msgid "match.op.display"
msgstr "Display"

msgid "match.op.display.records"
msgstr "Display Records"

msgid "match.op.duplicate"
msgstr "Duplicate"

@@ -555,11 +566,17 @@ msgstr "Display"
msgid "match.op.page.goto"
msgstr "Go To Page"

msgid "match.op.platform"
msgstr "Platform"

msgid "match.op.previous"
msgstr "Previous"

msgid "match.op.reconcile"
msgstr "Reconcile Unresolved Requests"
msgstr "Reconcile"

msgid "match.op.reconcile.requests"
msgstr "Reconcile Requests"

msgid "match.op.reconcile.a"
msgstr "Reconcile Unresolved Requests ({0})"
@@ -615,3 +632,10 @@ msgstr "Request could not be canonically resolved, pending record {0} created"

msgid "match.rs.saved"
msgstr "Saved"

### Titles
msgid "match.ti.matchgrid.config"
msgstr "Matchgrid Configuration"

msgid "match.ti.matchgrid"
msgstr "Matchgrid: {0}"
@@ -47,16 +47,6 @@ if($this->request->getRequestTarget(false) != '/') {
'action' => 'select']
);

if($modelsName != 'Matchgrids' && $modelsName != 'Permissions' && $modelsName != 'ApiUsers'
|| ($modelsName == 'Matchgrids' && ($action == 'reconcile' || $action == 'pending'))) {
// Link to matchgrids listing where appropriate
$this->Breadcrumbs->add(
__('match.ct.Matchgrids', [99]),
['controller' => 'matchgrids',
'action' => 'index' ]
);
}

if(!empty($vv_cur_mg)
&& ($modelsName != 'Matchgrids' || $action != 'manage')) {
// Link to matchgrid if set
@@ -93,7 +83,7 @@ if($this->request->getRequestTarget(false) != '/') {
);
}

if($action != 'index'
if($action != 'index' && $action != 'manage'
&& !($modelsName == 'Matchgrids' && $action == 'pending')) {

// Default parent is index, to which we might need to append the Primary Link ID
@@ -29,9 +29,6 @@

<script>
$(function() {
// Establish left-side navigation
$('#main-menu').metisMenu();

// Focus any designated form element
$('.focusFirst').focus();

@@ -27,70 +27,43 @@

// XXX we're using the same cookie as registry to determine collapsing of the menu,
// we should probably have our own cookie (note other cookies already use "match" prefix)

// The following menu will only render if we have a user and matchgrid (see default.ctp)
?>
<ul id="main-menu" class="metismenu">
<?php
if(!empty($vv_cur_mg)) {
// Matchgrid specific models

$models = [
'matchgrid_settings' => 'settings',
'api_users' => 'vpn_key',
'attributes' => 'edit',
'attribute_groups' => 'storage',
'attribute_maps' => 'swap_horiz',
'rules' => 'assignment',
'systems_of_record' => 'gavel',
];

foreach($models as $model => $icon) {
if($vv_menu_permissions[$model]) {
print '<li class="configMenu">';

$linkContent = '<em class="material-icons" aria-hidden="true">' . $icon . '</em><span class="menuTitle">'
. __('match.ct.'.\Cake\Utility\Inflector::camelize($model), [99])
. '</span>';

print $this->Html->link(
$linkContent,
['plugin' => null,
'controller' => $model,
'action' => 'index',
'matchgrid_id' => $vv_cur_mg->id],
['escape' => false]
);

print "</li>";
}
}
} else {
// Only render platform level configuration when not in the context of a matchgrid

$models = [
'matchgrids' => 'grid_on',
'permissions' => 'lock',
'api_users' => 'vpn_key'
];

foreach($models as $model => $icon) {
if($vv_menu_permissions[$model]) {
print '<li class="configMenu">';

$linkContent = '<em class="material-icons" aria-hidden="true">' . $icon . '</em><span class="menuTitle">'
. __('match.ct.'.\Cake\Utility\Inflector::camelize($model), [99])
. '</span>';

print $this->Html->link(
$linkContent,
['plugin' => null,
'controller' => $model,
'action' => 'index'],
['escape' => false]
);

print "</li>";
}
}
}
?>
<ul id="main-menu">
<?php // Always render the Manage link - limit what users can see from the page view ?>
<li class="configMenu">
<?= $this->Html->link(
'<em class="material-icons" aria-hidden="true">home</em>
<span class="menu-title">' . __('match.op.manage') . '</span>',
['controller' => 'Matchgrids',
'action' => 'manage',
$vv_cur_mg->id],
['escape' => false]);
?>
</li>
<?php if($vv_menu_permissions['gridroles']): ?>
<li class="configMenu">
<?= $this->Html->link(
'<em class="material-icons" aria-hidden="true">list</em>
<span class="menu-title">' . __('match.op.display') . '</span>',
['controller' => 'MatchgridRecords',
'action' => 'index',
'matchgrid_id' => $vv_cur_mg->id],
['escape' => false]);
?>
</li>
<?php endif; // $vv_menu_permissions['gridroles'] ?>
<?php if($vv_menu_permissions['reconcile']): ?>
<li class="configMenu">
<?= $this->Html->link(
'<em class="material-icons" aria-hidden="true">check_circle</em>
<span class="menu-title">' . __('match.op.reconcile') . '</span>',
['controller' => 'Matchgrids',
'action' => 'pending',
$vv_cur_mg->id],
['escape' => false]);
?>
</li>
<?php endif; // $vv_menu_permissions['reconcile'] ?>
</ul>
@@ -0,0 +1,108 @@
<?php
/*
* COmanage Match Secondary Menu Bar
* Displayed above all pages when logged in
*
* Portions licensed to the University Corporation for Advanced Internet
* Development, Inc. ("UCAID") under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* UCAID licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @link http://www.internet2.edu/comanage COmanage Project
* @package match
* @since COmanage Match v1.0.0
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0)
*/
?>
<?php if(!empty($vv_user)): ?>
<ul>
<?php if($vv_menu_permissions['gridroles']): ?>
<li id="top-menu-platform">
<a class="dropdown-toggle" href="#" role="button" id="platform-dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="top-menu-link-text">
<?= __('match.op.platform'); ?>
</span>
<em class="material-icons">settings</em>
</a>

<div class="dropdown-menu" aria-labelledby="platform-dropdown-toggle">
<?php
$models = [
'matchgrids' => 'grid_on',
'permissions' => 'lock',
'api_users' => 'vpn_key'
];

foreach($models as $model => $icon) {
if($vv_menu_permissions[$model]) {
$linkContent = '<em class="material-icons" aria-hidden="true">' . $icon . '</em><span class="menu-title">'
. __('match.ct.'.\Cake\Utility\Inflector::camelize($model), [99])
. '</span>';

print $this->Html->link(
$linkContent,
['plugin' => null,
'controller' => $model,
'action' => 'index'],
['escape' => false,'class' => 'dropdown-item']
);
}
}
?>
</div>
</li>
<?php endif; ?>
<li id="top-menu-user">
<a class="dropdown-toggle" href="#" role="button" id="user-panel-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="top-menu-link-text">
<?= $vv_user['username']; ?>
</span>
<em class="material-icons icon-adjust">person</em>
</a>
<!-- Account Dropdown -->
<div id="user-panel" aria-expanded="false" style="display: none;">
<div id="logout-in-panel">
<?php
print $this->Html->link(__('match.op.logout'),
'/auth/logout/logout.php',
['escape' => false,
'class' => 'btn']);
?>
</div>
<div id="user-panel-user-info">
<em class="material-icons">person</em>
<div id="user-panel-cn"><?= $vv_user['username']; ?></div>
<div id="user-panel-id"><?php print $this->getRequest()->getSession()->read('Auth.User.username'); ?></div>
</div>
</div>
</li>
</ul>
<?php endif; ?>

<?php if(!isset($noLoginLogout) || !$noLoginLogout) : ?>
<?php
if(!$vv_user) {
print $this->Html->link(__('match.op.login'),
['controller' => 'matchgrids',
'action' => 'select',
'plugin' => false],
['escape' => false,
'id' => 'login',
'class' => '']);
}
?>
<?php endif; ?>


0 comments on commit 01ce3fb

Please sign in to comment.
You can’t perform that action at this time.