diff --git a/Documentation/help_files/medical_dashboard_help.php b/Documentation/help_files/medical_dashboard_help.php
index 0a869a37157..17801bf6d04 100644
--- a/Documentation/help_files/medical_dashboard_help.php
+++ b/Documentation/help_files/medical_dashboard_help.php
@@ -166,6 +166,8 @@
.
+
+
.
.
diff --git a/interface/patient_file/summary/demographics.php b/interface/patient_file/summary/demographics.php
index ae2b0229d1e..20c21975bb2 100644
--- a/interface/patient_file/summary/demographics.php
+++ b/interface/patient_file/summary/demographics.php
@@ -55,9 +55,6 @@
use OpenEMR\Services\PatientIssuesService;
use OpenEMR\Services\PatientService;
use Symfony\Component\EventDispatcher\EventDispatcher;
-use OpenEMR\Patient\Cards\InsuranceViewCard;
-use OpenEMR\Patient\Cards\BillingViewCard;
-use OpenEMR\Patient\Cards\DemographicsViewCard;
$twig = new TwigContainer(null, $GLOBALS['kernel']);
@@ -79,6 +76,7 @@
// want smart support in their system.
$smartLaunchController = new SMARTLaunchController($GLOBALS["kernel"]->getEventDispatcher());
$smartLaunchController->registerContextEvents();
+$hiddenCards = getHiddenDashboardCards();
/**
* @var EventDispatcher
@@ -121,6 +119,17 @@
$insurance_array = array('primary', 'secondary', 'tertiary');
}
+function getHiddenDashboardCards(): array
+{
+ $hiddenList = [];
+ $ret = sqlStatement("SELECT gl_value FROM `globals` WHERE `gl_name` = 'hide_dashboard_cards'");
+ while ($row = sqlFetchArray($ret)) {
+ $hiddenList[] = $row['gl_value'];
+ }
+
+ return $hiddenList;
+}
+
function print_as_money($money)
{
preg_match("/(\d*)\.?(\d*)/", $money, $moneymatches);
@@ -1038,9 +1047,9 @@ function setMyPatient() {
getTwig();
- $allergy = (AclMain::aclCheckIssue('allergy')) ? 1 : 0;
- $pl = (AclMain::aclCheckIssue('medical_problem')) ? 1 : 0;
- $meds = (AclMain::aclCheckIssue('medication')) ? 1 : 0;
+ $allergy = (AclMain::aclCheckIssue('allergy') ? 1 : 0) && !in_array('card_allergies', $hiddenCards) ? 1 : 0;
+ $pl = (AclMain::aclCheckIssue('medical_problem') ? 1 : 0) && !in_array('card_medicalproblems', $hiddenCards) ? 1 : 0;
+ $meds = (AclMain::aclCheckIssue('medication') ? 1 : 0) && !in_array('card_medication', $hiddenCards) ? 1 : 0;
$rx = (!$GLOBALS['disable_prescriptions'] && AclMain::aclCheckCore('patients', 'rx')) ? 1 : 0;
$cards = max(1, ($allergy + $pl + $meds));
$col = "p-1 ";
@@ -1189,7 +1198,7 @@ function filterActiveIssues(array $i): array
ob_end_clean();
echo "";
- echo $t->render('patient/card/rx.html.twig', $viewArgs);
+ echo $t->render('patient/card/rx.html.twig', $viewArgs); // render core prescription card
echo "
";
endif;
?>
@@ -1276,7 +1285,9 @@ function filterActiveIssues(array $i): array
'prependedInjection' => $dispatchResult->getPrependedInjection(),
'appendedInjection' => $dispatchResult->getAppendedInjection(),
];
- echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ if (!in_array('card_patientreminders', $hiddenCards)) {
+ echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ }
endif; //end if prw is activated
if (AclMain::aclCheckCore('patients', 'disclosure')) :
@@ -1297,7 +1308,9 @@ function filterActiveIssues(array $i): array
'prependedInjection' => $dispatchResult->getPrependedInjection(),
'appendedInjection' => $dispatchResult->getAppendedInjection(),
];
- echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ if (!in_array('card_disclosure', $hiddenCards)) {
+ echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ }
endif; // end if disclosures authorized
if ($GLOBALS['amendments'] && AclMain::aclCheckCore('patients', 'amendment')) :
@@ -1325,7 +1338,9 @@ function filterActiveIssues(array $i): array
'prependedInjection' => $dispatchResult->getPrependedInjection(),
'appendedInjection' => $dispatchResult->getAppendedInjection(),
];
- echo $twig->getTwig()->render('patient/card/amendments.html.twig', $viewArgs);
+ if (!in_array('card_amendments', $hiddenCards)) {
+ echo $twig->getTwig()->render('patient/card/amendments.html.twig', $viewArgs);
+ }
endif; // end amendments authorized
if (AclMain::aclCheckCore('patients', 'lab')) :
@@ -1353,7 +1368,9 @@ function filterActiveIssues(array $i): array
'prependedInjection' => $dispatchResult->getPrependedInjection(),
'appendedInjection' => $dispatchResult->getAppendedInjection(),
];
- echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ if (!in_array('card_lab', $hiddenCards)) {
+ echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ }
endif; // end labs authorized
if ($vitals_is_registered && AclMain::aclCheckCore('patients', 'med')) :
@@ -1376,7 +1393,9 @@ function filterActiveIssues(array $i): array
'prependedInjection' => $dispatchResult->getPrependedInjection(),
'appendedInjection' => $dispatchResult->getAppendedInjection(),
];
- echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ if (!in_array('card_vitals', $hiddenCards)) {
+ echo $twig->getTwig()->render('patient/card/loader.html.twig', $viewArgs);
+ }
endif; // end vitals
// if anyone wants to render anything after the patient demographic list
diff --git a/interface/super/edit_globals.php b/interface/super/edit_globals.php
index e61a5476519..7fa928bd852 100644
--- a/interface/super/edit_globals.php
+++ b/interface/super/edit_globals.php
@@ -645,6 +645,38 @@ function checkBackgroundServices()
echo "\n";
}
echo " \n";
+ } elseif ($fldtype == GlobalSetting::DATA_TYPE_MULTI_DASHBOARD_CARDS) {
+ $hiddenList = [];
+ $ret = sqlStatement("SELECT gl_value FROM `globals` WHERE `gl_name` = 'hide_dashboard_cards'");
+ while ($row = sqlFetchArray($ret)) {
+ $hiddenList[] = $row['gl_value'];
+ }
+ // The list of cards to hide. For now add to array new cards.
+ $res = array(
+ ['card_abrev' => '', 'card_name' => xlt('None or Reset')],
+ ['card_abrev' => attr('card_allergies'), 'card_name' => xlt('Allergies')],
+ ['card_abrev' => attr('card_amendments'), 'card_name' => xlt('Amendments')],
+ ['card_abrev' => attr('card_disclosure'), 'card_name' => xlt('Disclosures')],
+ ['card_abrev' => attr('card_lab'), 'card_name' => xlt('Labs')],
+ ['card_abrev' => attr('card_medicalproblems'), 'card_name' => xlt('Medical Problems')],
+ ['card_abrev' => attr('card_medication'), 'card_name' => xlt('Medications')],
+ //['card_abrev' => 'card_rx', 'card_name' => 'Prescriptions'], // For now don't hide because can be disabled as feature.
+ ['card_abrev' => attr('card_vitals'), 'card_name' => xlt('Vitals')]
+ );
+ echo " \n";
} elseif ($fldtype == GlobalSetting::DATA_TYPE_COLOR_CODE) {
if ($userMode) {
$globalTitle = $globalValue;
diff --git a/library/globals.inc.php b/library/globals.inc.php
index dc3788a16fa..c9cf54aea73 100644
--- a/library/globals.inc.php
+++ b/library/globals.inc.php
@@ -191,7 +191,12 @@ function gblTimeZones()
'style_light.css',
xl('Pick a general theme (need to logout/login after changing this setting).')
),
-
+ 'hide_dashboard_cards' => array(
+ xl('Hide selected cards on patient dashboard'),
+ 'm_dashboard_cards',
+ '',
+ xl('Multi (Shift or CTRL) Select the cards you want to hide on the patient dashboard.')
+ ),
'window_title_add_patient_name' => array(
xl('Add Patient Name To Window Title'),
'bool', // data type
diff --git a/src/Services/Globals/GlobalSetting.php b/src/Services/Globals/GlobalSetting.php
index c270ebec4a7..71f50508c0e 100644
--- a/src/Services/Globals/GlobalSetting.php
+++ b/src/Services/Globals/GlobalSetting.php
@@ -42,6 +42,9 @@ class GlobalSetting
// multiple select language selector
const DATA_TYPE_MULTI_LANGUAGE_SELECT = "m_lang";
+ // multiple select dashboard cards
+ const DATA_TYPE_MULTI_DASHBOARD_CARDS = "m_dashboard_cards";
+
// list of default visits in OpenEMR
const DATA_TYPE_DEFAULT_VISIT_CATEGORY = "default_visit_category";
// CSS Theme selector