From 2c3735d0148dd9c6bc2f158202bb094a9f7e5786 Mon Sep 17 00:00:00 2001 From: loannis Date: Thu, 4 Nov 2021 21:33:53 +0200 Subject: [PATCH 1/2] Add support for badges.Use badges in match/matchgrids view --- app/resources/locales/en_US/default.po | 15 +++ app/src/Lib/Enum/StandardEnum.php | 4 +- app/src/View/AppView.php | 2 + app/src/View/Helper/BadgeHelper.php | 127 +++++++++++++++++++++++++ app/templates/Standard/index.php | 9 +- app/templates/element/badgeList.php | 78 +++++++++++++++ app/webroot/css/co-base.css | 56 +++++++++++ app/webroot/css/co-color.css | 8 +- 8 files changed, 294 insertions(+), 5 deletions(-) create mode 100644 app/src/View/Helper/BadgeHelper.php create mode 100644 app/templates/element/badgeList.php diff --git a/app/resources/locales/en_US/default.po b/app/resources/locales/en_US/default.po index 854f5bbc4..f9047c138 100644 --- a/app/resources/locales/en_US/default.po +++ b/app/resources/locales/en_US/default.po @@ -146,12 +146,21 @@ msgstr "{0,plural,=1{Pending Request} other{Pending Requests}}" msgid "match.en.ConfidenceModeEnum.C" msgstr "Canonical" +msgid "match.en.ConfidenceModeEnum.C.warn.level" +msgstr "Light" + msgid "match.en.ConfidenceModeEnum.P" msgstr "Potential" +msgid "match.en.ConfidenceModeEnum.P.warn.level" +msgstr "Light" + msgid "match.en.ConfidenceModeEnum.S" msgstr "Suspended" +msgid "match.en.ConfidenceModeEnum.S.warn.level" +msgstr "Danger" + msgid "match.en.PermissionEnum.A" msgstr "Platform Administrator" @@ -197,9 +206,15 @@ msgstr "Substring" msgid "match.en.StatusEnum.A" msgstr "Active" +msgid "match.en.StatusEnum.A.warn.level" +msgstr "Light" + msgid "match.en.StatusEnum.S" msgstr "Suspended" +msgid "match.en.StatusEnum.S.warn.level" +msgstr "Danger" + ### Error Messages msgid "match.er.args" msgstr "Incorrect arguments provided to {0}" diff --git a/app/src/Lib/Enum/StandardEnum.php b/app/src/Lib/Enum/StandardEnum.php index fd6251161..7cd256aae 100644 --- a/app/src/Lib/Enum/StandardEnum.php +++ b/app/src/Lib/Enum/StandardEnum.php @@ -47,8 +47,8 @@ public static function getLocalizedConsts() { $consts = $reflect->getConstants(); - $className = substr(strrchr(get_called_class(), '\\'), 1); - + $className = $reflect->getShortName(); + foreach(array_values($consts) as $key) { $ret[$key] = __('match.en.'.$className.'.'.$key); } diff --git a/app/src/View/AppView.php b/app/src/View/AppView.php index 1daf083e1..12eea33e9 100644 --- a/app/src/View/AppView.php +++ b/app/src/View/AppView.php @@ -41,5 +41,7 @@ class AppView extends View { public function initialize(): void { parent::initialize(); $this->loadHelper('Field'); + $this->loadHelper('Menu'); + $this->loadHelper('Badge'); } } diff --git a/app/src/View/Helper/BadgeHelper.php b/app/src/View/Helper/BadgeHelper.php new file mode 100644 index 000000000..cd91ab296 --- /dev/null +++ b/app/src/View/Helper/BadgeHelper.php @@ -0,0 +1,127 @@ +'; + } + + return $this->Html->tag( + 'span', + $fa_element . $title, + [ + 'class' => 'mr-1 badge ' . implode(' ', $badge_classes), + 'escape' => false, + ] + ); + } + + /** + * Get the Badge Color + * + * @param string $color + * @return string|null + * + * @since COmanage Match v1.0.0 + */ + public function getBadgeColor(string $color): ?string { + if(empty($color)) { + return null; + } + + $color_map = [ + 'Success' => 'success', + 'Danger' => 'danger', + 'Warning' => 'warning', + 'Primary' => 'primary', + 'Secondary' => 'secondary', + 'Light' => 'light', + 'Info' => 'info', + 'Dark' => 'dark', + ]; + + if(!isset($color_map[$color])) { + return null; + } + + return $color_map[$color]; + } + +} \ No newline at end of file diff --git a/app/templates/Standard/index.php b/app/templates/Standard/index.php index 5fb1ed1e1..854b791f5 100644 --- a/app/templates/Standard/index.php +++ b/app/templates/Standard/index.php @@ -187,7 +187,14 @@ function _column_key($modelsName, $c, $tz=null) { break; case 'enum': if($entity->$col) { - print __('match.en.'.$cfg['class'].'.'.$entity->$col); + $warning_level = __('match.en.'.$cfg['class'].'.'.$entity->$col . '.warn.level'); + $title = __('match.en.'.$cfg['class'].'.'.$entity->$col); + + if(!empty($warning_level) && strpos($warning_level, '.warn.level') === false) { + print $this->Badge->badgeIt($title, $this->Badge->getBadgeColor($warning_level)); + } else { + print $title; + } } break; case 'fk': diff --git a/app/templates/element/badgeList.php b/app/templates/element/badgeList.php new file mode 100644 index 000000000..972b3eaf6 --- /dev/null +++ b/app/templates/element/badgeList.php @@ -0,0 +1,78 @@ + BadgeOrderEnum::Status, + * 'text' => "mytext", + * 'color' => BadgeColorModeEnum::Blue, + * 'outline' => false, + * 'pill' => true, + * 'fa_class' => 'fa-key', + * ), + * ); + * + * + * @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) + */ +?> + +'; + } + if(isset($badge['outline']) && $badge['outline']) { + $badge_classes[] = "bg-outline-" . $badge['color']; + } else { + $badge_classes[] = "bg-" . $badge['color']; + } + if(in_array($badge['color'], ['light', 'info']) + && !$badge['dis_text_dark']) { + $badge_classes[] = "text-dark"; + } + + // Print the Badge + print $this->Html->tag( + 'span', + $fa_element . $badge['text'], + [ + 'class' => 'mr-1 badge ' . implode(' ', $badge_classes), + 'escape' => false, + ] + ); +} \ No newline at end of file diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css index 8fc3f1f6b..4efa932f6 100644 --- a/app/webroot/css/co-base.css +++ b/app/webroot/css/co-base.css @@ -1311,6 +1311,62 @@ td.indented { vertical-align: text-bottom; margin-right: 0.25em; } +/*Bootstrap badge*/ +.badge { + font-size: 0.95em; + font-weight: normal; + height: min-content; + margin-top: auto; + margin-bottom: auto; +} +.bg-secondary, +.bg-success, +.bg-danger, +.bg-warning, +.bg-info, +.bg-light, +.bg-dark, +.bg-primary { + border: 1px solid transparent; +} +.bg-warning { + background-color: var(--cmg-color-yellow-002); +} +.bg-primary { + background-color: var(--cmg-color-blue-003); +} +.bg-secondary { + background-color: var(--cmg-color-gray-002); +} +/* Bootstrap bg-outline */ +.bg-outline-primary { + color: var(--cmg-color-blue-003); + border: 1px solid var(--cmg-color-blue-003); +} +.bg-outline-info { + color: var(--cmg-color-blue-006); + border: 1px solid var(--cmg-color-blue-006); +} +.bg-outline-danger { + color: var(--cmg-color-red-005);; + border: 1px solid var(--cmg-color-red-005);; +} +.bg-outline-success { + color: var(--cmg-color-green-007); + border: 1px solid var(--cmg-color-green-007); +} +.bg-outline-warning { + color: var(--cmg-color-yellow-002); + border: 1px solid var(--cmg-color-yellow-002); +} +.bg-outline-light { + color: var(--cmg-color-gray-004); + border: 1px solid var(--cmg-color-gray-004); +} +.bg-outline-secondary { + color: var(--cmg-color-gray-002); + border: 1px solid var(--cmg-color-gray-002); +} /* FOOTER */ footer { text-align: center; diff --git a/app/webroot/css/co-color.css b/app/webroot/css/co-color.css index 9dc47cf1c..b5243f0a6 100644 --- a/app/webroot/css/co-color.css +++ b/app/webroot/css/co-color.css @@ -35,10 +35,12 @@ --cmg-color-blue-003: #0c75c0; /* submit buttons, .btn-primary */ --cmg-color-blue-004: #9fc6e2; /* spinner */ --cmg-color-blue-005: #53B1F4; /* link focus borders for keyboard nav */ - + --cmg-color-blue-006: #17a2b8; /* info bagde */ + --cmg-color-gray-001: #222; /* body text */ --cmg-color-gray-002: #555; /* headings text */ --cmg-color-gray-003: #666; /* disabled text or form fields */ + --cmg-color-gray-004: #212529; /* badge light */ --cmg-color-lightgray-001: #fafafa; /* background color, drawer */ --cmg-color-lightgray-002: #f8f8f8; /* background color */ @@ -57,7 +59,8 @@ --cmg-color-green-004: #282; /* pagination */ --cmg-color-green-005: #030; /* pagination border color */ --cmg-color-green-006: #040; /* pagination button color */ - + --cmg-color-green-007: #28a745; /* success badge */ + --cmg-color-yellow-001: #f5f5bb; /* yellow warning */ --cmg-color-yellow-002: #fbec88; /* infobox informational area */ --cmg-color-yellow-003: #ffd; /* forms: focused input */ @@ -66,6 +69,7 @@ --cmg-color-red-002: #c00; /* forms: error icons */ --cmg-color-red-003: #e33; /* title for deleted/archived */ --cmg-color-red-004: #c33; /* button */ + --cmg-color-red-005: #dc3545; /* danger badge */ --cmg-color-white: #fff; /* white */ --cmg-color-black: #000; /* black */ From bf744e6810390756f6aa8218550d88658fdc05f9 Mon Sep 17 00:00:00 2001 From: loannis Date: Mon, 15 Nov 2021 08:15:57 +0200 Subject: [PATCH 2/2] Limit badge usage to suspended state only --- app/resources/locales/en_US/default.po | 13 ++----------- app/templates/Standard/index.php | 6 +++--- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/app/resources/locales/en_US/default.po b/app/resources/locales/en_US/default.po index f9047c138..65863da87 100644 --- a/app/resources/locales/en_US/default.po +++ b/app/resources/locales/en_US/default.po @@ -146,19 +146,13 @@ msgstr "{0,plural,=1{Pending Request} other{Pending Requests}}" msgid "match.en.ConfidenceModeEnum.C" msgstr "Canonical" -msgid "match.en.ConfidenceModeEnum.C.warn.level" -msgstr "Light" - msgid "match.en.ConfidenceModeEnum.P" msgstr "Potential" -msgid "match.en.ConfidenceModeEnum.P.warn.level" -msgstr "Light" - msgid "match.en.ConfidenceModeEnum.S" msgstr "Suspended" -msgid "match.en.ConfidenceModeEnum.S.warn.level" +msgid "match.en.ConfidenceModeEnum.S.badge" msgstr "Danger" msgid "match.en.PermissionEnum.A" @@ -206,13 +200,10 @@ msgstr "Substring" msgid "match.en.StatusEnum.A" msgstr "Active" -msgid "match.en.StatusEnum.A.warn.level" -msgstr "Light" - msgid "match.en.StatusEnum.S" msgstr "Suspended" -msgid "match.en.StatusEnum.S.warn.level" +msgid "match.en.StatusEnum.S.badge" msgstr "Danger" ### Error Messages diff --git a/app/templates/Standard/index.php b/app/templates/Standard/index.php index 854b791f5..801e49b36 100644 --- a/app/templates/Standard/index.php +++ b/app/templates/Standard/index.php @@ -187,11 +187,11 @@ function _column_key($modelsName, $c, $tz=null) { break; case 'enum': if($entity->$col) { - $warning_level = __('match.en.'.$cfg['class'].'.'.$entity->$col . '.warn.level'); + $badge_color_class = __('match.en.'.$cfg['class'].'.'.$entity->$col . '.badge'); $title = __('match.en.'.$cfg['class'].'.'.$entity->$col); - if(!empty($warning_level) && strpos($warning_level, '.warn.level') === false) { - print $this->Badge->badgeIt($title, $this->Badge->getBadgeColor($warning_level)); + if(!empty($badge_color_class) && strpos($badge_color_class, '.badge') === false) { + print $this->Badge->badgeIt($title, $this->Badge->getBadgeColor($badge_color_class)); } else { print $title; }