diff --git a/app/src/Lib/Traits/SearchFilterTrait.php b/app/src/Lib/Traits/SearchFilterTrait.php
index 6a13472f9..dd05c5fe3 100644
--- a/app/src/Lib/Traits/SearchFilterTrait.php
+++ b/app/src/Lib/Traits/SearchFilterTrait.php
@@ -29,6 +29,8 @@
namespace App\Lib\Traits;
+use Cake\Utility\Inflector;
+
trait SearchFilterTrait {
// Array (and configuration) of permitted search filters
private $searchFilters = array();
@@ -54,9 +56,9 @@ public function getLabel(string $attribute): string {
if($l != $attribute) {
return $l;
}
-
- // If we make it here, just return $attribute
- return $attribute;
+
+ // If we make it here, just return a pretty version of the $attribute name
+ return Inflector::humanize($attribute);
}
/**
diff --git a/app/src/View/Helper/MenuHelper.php b/app/src/View/Helper/MenuHelper.php
index 3ac9dd8b6..0752e1052 100644
--- a/app/src/View/Helper/MenuHelper.php
+++ b/app/src/View/Helper/MenuHelper.php
@@ -80,7 +80,8 @@ public function getMenuIcon($action) {
'Delete' => 'delete'
);
- return $icon[$action];
+ // For the actions with Default order we can pass directly the name of the icon
+ return $icon[$action] ?? $action;
}
}
\ No newline at end of file
diff --git a/app/templates/Standard/index.php b/app/templates/Standard/index.php
index 9a10ee5ca..d602c32e1 100644
--- a/app/templates/Standard/index.php
+++ b/app/templates/Standard/index.php
@@ -91,38 +91,52 @@ function _column_key($modelsName, $c, $tz=null) {
= $vv_title; ?>
-
-
- -
- = $this->Html->link('add_circle ' .
- __d('operation', 'add.a', __d('controller', $modelsName, [1])),
- ['action' => 'add', '?' => $linkFilter],
- ['escape' => false]); ?>
-
- ' .
- $this->Html->link(
- '' . $t['icon']. ' ' . $t['label'],
- $t['link'],
- ['escape' => false, 'class' => $t['class']]
- ) . '
- ';
- }
- }
+ $this->Menu->getMenuOrder('Add'),
+ 'icon' => $this->Menu->getMenuIcon('Add'),
+ 'url' => $this->Url->build(
+ [
+ 'controller' => $modelsName,
+ 'action' => 'add',
+ '?' => $linkFilter
+ ]
+ ),
+ 'label' => __d('operation', 'add.a', __d('controller', $modelsName, [1])),
+ ];
+
+ foreach(($topLinks ?? []) as $t) {
+ if($vv_permissions[ $t['link']['action'] ]) {
+ // We need to inject $linkFilter, but not overwrite any existing query params
+ if(!empty($t['link']['?'])) {
+ $t['link']['?'] = array_merge($t['link']['?'], $linkFilter);
+ } else {
+ $t['link']['?'] = $linkFilter;
}
- ?>
-
-
+
+ $action_args['vv_actions'][] = [
+ 'order' => $this->Menu->getMenuOrder($t['order']),
+ 'icon' => $this->Menu->getMenuIcon($t['icon']),
+ 'url' => $this->Url->build($t['link']),
+ 'label' => $t['label'],
+ ];
+ }
+ }
+ }
+
+ if(!empty($action_args['vv_actions'])) {
+ print '';
+ print $this->element('menuAction', $action_args);
+ print '
';
+ }
+ ?>
diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css
index 1d58a8619..6907b9e00 100644
--- a/app/webroot/css/co-base.css
+++ b/app/webroot/css/co-base.css
@@ -491,6 +491,7 @@ instead, reveal in user menu */
display: flex;
justify-content: space-between;
margin: 1em 0 0.5em;
+ align-items: baseline;
}
.pageTitle {
padding-bottom: 0.25em;