From 744ba809fe878cfc9e0a0f110da64477afc284da Mon Sep 17 00:00:00 2001 From: loannis Date: Thu, 4 Nov 2021 21:33:53 +0200 Subject: [PATCH] Add support for badges.Use badges in match/matchgrids view --- app/resources/locales/en_US/default.po | 57 ++++++++++++ app/src/Lib/Enum/StandardEnum.php | 4 +- app/src/View/AppView.php | 2 + app/src/View/Helper/BadgeHelper.php | 118 +++++++++++++++++++++++++ app/templates/Standard/index.php | 5 +- app/templates/element/badgeList.php | 74 ++++++++++++++++ app/webroot/css/co-base.css | 56 ++++++++++++ app/webroot/css/co-color.css | 8 +- 8 files changed, 319 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..89fcabd65 100644 --- a/app/resources/locales/en_US/default.po +++ b/app/resources/locales/en_US/default.po @@ -146,60 +146,117 @@ 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" +msgid "match.en.PermissionEnum.A.warn.level" +msgstr "Secondary" + msgid "match.en.PermissionEnum.MA" msgstr "Matchgrid Administrator" +msgid "match.en.PermissionEnum.MA.warn.level" +msgstr "Light" + msgid "match.en.PermissionEnum.RM" msgstr "Reconciliation Manager" +msgid "match.en.PermissionEnum.RM.warn.level" +msgstr "Light" + msgid "match.en.PermissionEnum.RS" msgstr "Reconciliation Support" +msgid "match.en.PermissionEnum.RS.warn.level" +msgstr "Light" + msgid "match.en.PermissionEnum.X" msgstr "None" +msgid "match.en.PermissionEnum.X.warn.level" +msgstr "Warning" + msgid "match.en.ReferenceIdEnum.S" msgstr "Sequence" +msgid "match.en.ReferenceIdEnum.S.warn.level" +msgstr "Light" + msgid "match.en.ReferenceIdEnum.U" msgstr "UUID (Type 4)" +msgid "match.en.ReferenceIdEnum.U.warn.level" +msgstr "Light" + msgid "match.en.ResolutionModeEnum.E" msgstr "External" +msgid "match.en.ResolutionModeEnum.E.warn.level" +msgstr "Light" + msgid "match.en.ResolutionModeEnum.I" msgstr "Interactive" +msgid "match.en.ResolutionModeEnum.I.warn.level" +msgstr "Light" + msgid "match.en.SearchTypeEnum.D" msgstr "Distance" +msgid "match.en.SearchTypeEnum.D.warn.level" +msgstr "Light" + msgid "match.en.SearchTypeEnum.E" msgstr "Exact" +msgid "match.en.SearchTypeEnum.E.warn.level" +msgstr "Light" + msgid "match.en.SearchTypeEnum.M" msgstr "Mapping" +msgid "match.en.SearchTypeEnum.M.warn.level" +msgstr "Light" + msgid "match.en.SearchTypeEnum.X" msgstr "Skip" +msgid "match.en.SearchTypeEnum.X.warn.level" +msgstr "Light" + msgid "match.en.SearchTypeEnum.S" msgstr "Substring" +msgid "match.en.SearchTypeEnum.S.warn.level" +msgstr "Light" + 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..6996141ea --- /dev/null +++ b/app/src/View/Helper/BadgeHelper.php @@ -0,0 +1,118 @@ +'; + } + + 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', + ]; + + 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 e048c37a2..408641714 100644 --- a/app/templates/Standard/index.php +++ b/app/templates/Standard/index.php @@ -187,7 +187,10 @@ 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); + + print $this->Badge->badgeIt($title, $this->Badge->getBadgeColor($warning_level)); } break; case 'fk': diff --git a/app/templates/element/badgeList.php b/app/templates/element/badgeList.php new file mode 100644 index 000000000..b250943f4 --- /dev/null +++ b/app/templates/element/badgeList.php @@ -0,0 +1,74 @@ + 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[] = "badge-outline-" . $badge['color']; + } else { + $badge_classes[] = "badge-" . $badge['color']; + } + + // 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 6d2798c49..ec747fcc2 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; +} +.badge-secondary, +.badge-success, +.badge-danger, +.badge-warning, +.badge-info, +.badge-light, +.badge-dark, +.badge-primary { + border: 1px solid transparent; +} +.badge-warning { + background-color: var(--cmg-color-yellow-002); +} +.badge-primary { + background-color: var(--cmg-color-blue-003); +} +.badge-secondary { + background-color: var(--cmg-color-gray-002); +} +/* Bootstrap badge-outline */ +.badge-outline-primary { + color: var(--cmg-color-blue-003); + border: 1px solid var(--cmg-color-blue-003); +} +.badge-outline-info { + color: var(--cmg-color-blue-006); + border: 1px solid var(--cmg-color-blue-006); +} +.badge-outline-danger { + color: var(--cmg-color-red-005);; + border: 1px solid var(--cmg-color-red-005);; +} +.badge-outline-success { + color: var(--cmg-color-green-007); + border: 1px solid var(--cmg-color-green-007); +} +.badge-outline-warning { + color: var(--cmg-color-yellow-002); + border: 1px solid var(--cmg-color-yellow-002); +} +.badge-outline-light { + color: var(--cmg-color-gray-004); + border: 1px solid var(--cmg-color-gray-004); +} +.badge-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 */