You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
531 lines
15 KiB
531 lines
15 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Edit Layout Properties.
|
||
|
*
|
||
|
* @package OpenEMR
|
||
|
* @link http://www.open-emr.org
|
||
|
* @author Rod Roark <rod@sunsetsystems.com>
|
||
|
* @author Brady Miller <brady.g.miller@gmail.com>
|
||
|
* @copyright Copyright (c) 2016-2021 Rod Roark <rod@sunsetsystems.com>
|
||
|
* @copyright Copyright (c) 2018 Brady Miller <brady.g.miller@gmail.com>
|
||
|
* @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
|
||
|
*/
|
||
|
|
||
|
require_once("../globals.php");
|
||
|
|
||
|
use OpenEMR\Common\Acl\AclMain;
|
||
|
use OpenEMR\Common\Csrf\CsrfUtils;
|
||
|
use OpenEMR\Common\Twig\TwigContainer;
|
||
|
use OpenEMR\Core\Header;
|
||
|
use OpenEMR\Gacl\GaclApi;
|
||
|
|
||
|
$alertmsg = "";
|
||
|
|
||
|
// Check authorization.
|
||
|
$thisauth = AclMain::aclCheckCore('admin', 'super');
|
||
|
if (!$thisauth) {
|
||
|
echo (new TwigContainer(null, $GLOBALS['kernel']))->getTwig()->render('core/unauthorized.html.twig', ['pageTitle' => xl("Edit Layout Properties")]);
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
$layout_id = empty($_GET['layout_id']) ? '' : $_GET['layout_id'];
|
||
|
$group_id = empty($_GET['group_id' ]) ? '' : $_GET['group_id' ];
|
||
|
?>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title><?php echo xlt("Edit Layout Properties"); ?></title>
|
||
|
<?php Header::setupHeader('opener'); ?>
|
||
|
|
||
|
<style>
|
||
|
td { font-size:10pt; }
|
||
|
</style>
|
||
|
|
||
|
<script>
|
||
|
|
||
|
<?php require($GLOBALS['srcdir'] . "/restoreSession.php"); ?>
|
||
|
|
||
|
// The name of the input element to receive a found code.
|
||
|
var current_sel_name = '';
|
||
|
|
||
|
// This invokes the "dynamic" find-code popup.
|
||
|
function sel_related(elem, codetype) {
|
||
|
current_sel_name = elem ? elem.name : '';
|
||
|
var url = '<?php echo $rootdir ?>/patient_file/encounter/find_code_dynamic.php';
|
||
|
if (codetype) url += '?codetype=' + encodeURIComponent(codetype);
|
||
|
dlgopen(url, '_blank', 800, 500);
|
||
|
}
|
||
|
|
||
|
// This is for callback by the find-code popup.
|
||
|
// Appends to or erases the current list of related codes.
|
||
|
function set_related(codetype, code, selector, codedesc) {
|
||
|
var f = document.forms[0];
|
||
|
// frc will be the input element containing the codes.
|
||
|
var frc = f[current_sel_name];
|
||
|
var s = frc.value;
|
||
|
if (code) {
|
||
|
if (s.length > 0) {
|
||
|
s += ';';
|
||
|
}
|
||
|
s += codetype + ':' + code;
|
||
|
} else {
|
||
|
s = '';
|
||
|
}
|
||
|
frc.value = s;
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
// This is for callback by the find-code popup.
|
||
|
// Deletes the specified codetype:code from the active input element.
|
||
|
function del_related(s) {
|
||
|
var f = document.forms[0];
|
||
|
my_del_related(s, f[current_sel_name], false);
|
||
|
}
|
||
|
|
||
|
// This is for callback by the find-code popup.
|
||
|
// Returns the array of currently selected codes with each element in codetype:code format.
|
||
|
function get_related() {
|
||
|
var f = document.forms[0];
|
||
|
if (current_sel_name) {
|
||
|
return f[current_sel_name].value.split(';');
|
||
|
}
|
||
|
return new Array();
|
||
|
}
|
||
|
|
||
|
</script>
|
||
|
|
||
|
</head>
|
||
|
|
||
|
<body class="body_top">
|
||
|
|
||
|
<?php
|
||
|
if (!empty($_POST['form_submit']) && !$alertmsg) {
|
||
|
if (!CsrfUtils::verifyCsrfToken($_POST["csrf_token_form"])) {
|
||
|
CsrfUtils::csrfNotVerified();
|
||
|
}
|
||
|
|
||
|
if ($group_id) {
|
||
|
$sets =
|
||
|
"grp_subtitle = ?, " .
|
||
|
"grp_init_open = ?, " .
|
||
|
"grp_columns = ?";
|
||
|
$sqlvars = array(
|
||
|
$_POST['form_subtitle'],
|
||
|
empty($_POST['form_init_open' ]) ? 0 : 1,
|
||
|
intval($_POST['form_columns']),
|
||
|
);
|
||
|
} else {
|
||
|
$sets =
|
||
|
"grp_title = ?, " .
|
||
|
"grp_subtitle = ?, " .
|
||
|
"grp_mapping = ?, " .
|
||
|
"grp_seq = ?, " .
|
||
|
"grp_activity = ?, " .
|
||
|
"grp_repeats = ?, " .
|
||
|
"grp_columns = ?, " .
|
||
|
"grp_size = ?, " .
|
||
|
"grp_issue_type = ?, " .
|
||
|
"grp_aco_spec = ?, " .
|
||
|
// "grp_save_close = ?, " .
|
||
|
"grp_init_open = ?, " .
|
||
|
"grp_referrals = ?, " .
|
||
|
"grp_services = ?, " .
|
||
|
"grp_products = ?, " .
|
||
|
"grp_diags = ?";
|
||
|
$sqlvars = array(
|
||
|
$_POST['form_title'],
|
||
|
$_POST['form_subtitle'],
|
||
|
$_POST['form_mapping'],
|
||
|
intval($_POST['form_seq']),
|
||
|
empty($_POST['form_activity']) ? 0 : 1,
|
||
|
intval($_POST['form_repeats']),
|
||
|
intval($_POST['form_columns']),
|
||
|
intval($_POST['form_size']),
|
||
|
$_POST['form_issue'],
|
||
|
$_POST['form_aco'],
|
||
|
// empty($_POST['form_save_close']) ? 0 : 1,
|
||
|
empty($_POST['form_init_open' ]) ? 0 : 1,
|
||
|
empty($_POST['form_referrals']) ? 0 : 1,
|
||
|
empty($_POST['form_services']) ? '' : (empty($_POST['form_services_codes']) ? '*' : $_POST['form_services_codes']),
|
||
|
empty($_POST['form_products']) ? '' : (empty($_POST['form_products_codes']) ? '*' : $_POST['form_products_codes']),
|
||
|
empty($_POST['form_diags' ]) ? '' : (empty($_POST['form_diags_codes' ]) ? '*' : $_POST['form_diags_codes' ]),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ($layout_id) {
|
||
|
// They have edited an existing layout.
|
||
|
$form_title = $_POST['form_title'] ?? '';
|
||
|
if ($form_title == '' && !$group_id) {
|
||
|
$alertmsg = xl('Title is required');
|
||
|
} else {
|
||
|
$sqlvars[] = $layout_id;
|
||
|
$sqlvars[] = $group_id;
|
||
|
sqlStatement(
|
||
|
"UPDATE layout_group_properties SET $sets " .
|
||
|
"WHERE grp_form_id = ? AND grp_group_id = ?",
|
||
|
$sqlvars
|
||
|
);
|
||
|
}
|
||
|
} elseif (!$group_id) {
|
||
|
// They want to add a new layout. New groups not supported here.
|
||
|
$form_form_id = $_POST['form_form_id'];
|
||
|
$form_title = $_POST['form_title'];
|
||
|
if ($form_form_id == '') {
|
||
|
$alertmsg = xl('Layout ID is required');
|
||
|
} elseif ($form_title == '') {
|
||
|
$alertmsg = xl('Title is required');
|
||
|
} elseif (preg_match('/(LBF|LBT|HIS)[0-9A-Za-z_]+/', $form_form_id)) {
|
||
|
$tmp = sqlQuery(
|
||
|
"SELECT grp_form_id FROM layout_group_properties WHERE " .
|
||
|
"grp_form_id = ? AND grp_group_id = ''",
|
||
|
array($form_form_id)
|
||
|
);
|
||
|
if (empty($row)) {
|
||
|
$sqlvars[] = $form_form_id;
|
||
|
sqlStatement(
|
||
|
"INSERT INTO layout_group_properties " .
|
||
|
"SET $sets, grp_form_id = ?, grp_group_id = ''",
|
||
|
$sqlvars
|
||
|
);
|
||
|
$layout_id = $form_form_id;
|
||
|
} else {
|
||
|
$alertmsg = xl('This layout ID already exists');
|
||
|
}
|
||
|
} else {
|
||
|
$alertmsg = xl('Invalid layout ID');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Close this window and redisplay the layout editor.
|
||
|
//
|
||
|
echo "<script>\n";
|
||
|
if ($alertmsg) {
|
||
|
echo " alert(" . js_escape($alertmsg) . ");\n";
|
||
|
}
|
||
|
echo " if (opener.refreshme) opener.refreshme(" . js_escape($layout_id) . ");\n";
|
||
|
echo " window.close();\n";
|
||
|
echo "</script></body></html>\n";
|
||
|
exit();
|
||
|
}
|
||
|
|
||
|
$row = array(
|
||
|
'grp_form_id' => '',
|
||
|
'grp_title' => '',
|
||
|
'grp_subtitle' => '',
|
||
|
'grp_mapping' => 'Clinical',
|
||
|
'grp_seq' => '0',
|
||
|
'grp_activity' => '1',
|
||
|
'grp_repeats' => '0',
|
||
|
'grp_columns' => '4',
|
||
|
'grp_size' => '9',
|
||
|
'grp_issue_type' => '',
|
||
|
'grp_aco_spec' => '',
|
||
|
// 'grp_save_close' => '0',
|
||
|
'grp_init_open' => '0',
|
||
|
'grp_referrals' => '0',
|
||
|
'grp_services' => '',
|
||
|
'grp_products' => '',
|
||
|
'grp_diags' => '',
|
||
|
'grp_last_update' => '',
|
||
|
);
|
||
|
|
||
|
if ($layout_id) {
|
||
|
$row = sqlQuery(
|
||
|
"SELECT * FROM layout_group_properties WHERE " .
|
||
|
"grp_form_id = ? AND grp_group_id = ?",
|
||
|
array($layout_id, $group_id)
|
||
|
);
|
||
|
if (empty($row)) {
|
||
|
die(xlt('This layout does not exist.'));
|
||
|
}
|
||
|
}
|
||
|
?>
|
||
|
|
||
|
<form method='post' action='edit_layout_props.php?<?php echo "layout_id=" . attr_url($layout_id) . "&group_id=" . attr_url($group_id); ?>'>
|
||
|
<input type="hidden" name="csrf_token_form" value="<?php echo attr(CsrfUtils::collectCsrfToken()); ?>" />
|
||
|
<center>
|
||
|
|
||
|
<table class='w-100 border-0'>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Layout ID'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<?php if (empty($layout_id)) { ?>
|
||
|
<input type='text' class='form-control' size='31' maxlength='31' name='form_form_id' value='' /><br />
|
||
|
<?php echo xlt('Visit form ID must start with LBF. Transaction form ID must start with LBT.') ?>
|
||
|
<?php } else { ?>
|
||
|
<?php echo text($layout_id); ?>
|
||
|
<?php } ?>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php if (empty($group_id) && !empty($row['grp_last_update'])) { ?>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Last Update'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<?php echo text($row['grp_last_update']); ?>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<?php } ?>
|
||
|
|
||
|
<?php if (empty($group_id)) { ?>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Title'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='40' name='form_title' value='<?php echo attr($row['grp_title']); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
<?php } ?>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Subtitle'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='40' name='form_subtitle' value='<?php echo attr($row['grp_subtitle']); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php if (empty($group_id)) { ?>
|
||
|
<tr>
|
||
|
<td></td>
|
||
|
<td><?php echo xlt('For transactions, change category to Transactions'); ?></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Category'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
|
||
|
<input type='text' class='form-control' size='40' name='form_mapping' value='<?php echo attr($row['grp_mapping']); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Active{{Item}}'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='checkbox' name='form_activity' <?php echo ($row['grp_activity']) ? "checked" : ""; ?> />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Sequence'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='4' name='form_seq' value='<?php echo attr($row['grp_seq']); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Repeats'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='4' name='form_repeats'
|
||
|
value='<?php echo attr($row['grp_repeats']); ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php } ?>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' nowrap>
|
||
|
<?php echo xlt('Layout Columns'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<select name='form_columns' class='form-control'>
|
||
|
<?php
|
||
|
echo "<option value='0'>" . xlt('Default') . "</option>\n";
|
||
|
for ($cols = 2; $cols <= 12; ++$cols) {
|
||
|
echo "<option value='" . attr($cols) . "'";
|
||
|
if ($cols == $row['grp_columns']) {
|
||
|
echo " selected";
|
||
|
}
|
||
|
echo ">" . text($cols) . "</option>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php if (empty($group_id)) { ?>
|
||
|
<tr>
|
||
|
<td valign='top' nowrap>
|
||
|
<?php echo xlt('Font Size'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<select name='form_size' class='form-control'>
|
||
|
<?php
|
||
|
echo "<option value='0'>" . xlt('Default') . "</option>\n";
|
||
|
for ($size = 5; $size <= 15; ++$size) {
|
||
|
echo "<option value='" . attr($size) . "'";
|
||
|
if ($size == $row['grp_size']) {
|
||
|
echo " selected";
|
||
|
}
|
||
|
echo ">" . text($size) . "</option>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' nowrap>
|
||
|
<?php echo xlt('Issue Type'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<select name='form_issue' class='form-control'>
|
||
|
<option value=''></option>
|
||
|
<?php
|
||
|
$itres = sqlStatement(
|
||
|
"SELECT type, singular FROM issue_types " .
|
||
|
"WHERE category = ? AND active = 1 ORDER BY singular",
|
||
|
array($GLOBALS['ippf_specific'] ? 'ippf_specific' : 'default')
|
||
|
);
|
||
|
while ($itrow = sqlFetchArray($itres)) {
|
||
|
echo "<option value='" . attr($itrow['type']) . "'";
|
||
|
if ($itrow['type'] == $row['grp_issue_type']) {
|
||
|
echo " selected";
|
||
|
}
|
||
|
echo ">" . xlt($itrow['singular']) . "</option>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' nowrap>
|
||
|
<?php echo xlt('Access Control'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<select name='form_aco' class='form-control'>
|
||
|
<option value=''></option>
|
||
|
<?php
|
||
|
$gacl = new GaclApi();
|
||
|
// collect and sort all aco objects
|
||
|
$list_aco_objects = $gacl->get_objects(null, 0, 'ACO');
|
||
|
ksort($list_aco_objects);
|
||
|
foreach ($list_aco_objects as $seckey => $dummy) {
|
||
|
if (empty($dummy)) {
|
||
|
continue;
|
||
|
}
|
||
|
asort($list_aco_objects[$seckey]);
|
||
|
$aco_section_data = $gacl->get_section_data($seckey, 'ACO');
|
||
|
$aco_section_title = $aco_section_data[3];
|
||
|
echo " <optgroup label='" . xla($aco_section_title) . "'>\n";
|
||
|
foreach ($list_aco_objects[$seckey] as $acokey) {
|
||
|
$aco_id = $gacl->get_object_id($seckey, $acokey, 'ACO');
|
||
|
$aco_data = $gacl->get_object_data($aco_id, 'ACO');
|
||
|
$aco_title = $aco_data[0][3];
|
||
|
echo " <option value='" . attr("$seckey|$acokey") . "'";
|
||
|
if ("$seckey|$acokey" == $row['grp_aco_spec']) {
|
||
|
echo " selected";
|
||
|
}
|
||
|
echo ">" . xlt($aco_title) . "</option>\n";
|
||
|
}
|
||
|
echo " </optgroup>\n";
|
||
|
}
|
||
|
?>
|
||
|
</select>
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php /* ?>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Enable Save and Close'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='checkbox' name='form_save_close' <?php echo ($row['grp_save_close']) ? "checked" : ""; ?> />
|
||
|
</td>
|
||
|
</tr>
|
||
|
<?php */ ?>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<input type='checkbox' name='form_services' <?php echo ($row['grp_services']) ? "checked" : ""; ?> />
|
||
|
<?php echo xlt('Show Services Section'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='40' name='form_services_codes' onclick='sel_related(this, "MA")' value='<?php echo ($row['grp_services'] != '*') ? attr($row['grp_services']) : ""; ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<input type='checkbox' name='form_products' <?php echo ($row['grp_products']) ? "checked" : ""; ?> />
|
||
|
<?php echo xlt('Show Products Section'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='40' name='form_products_codes' onclick='sel_related(this, "PROD")' value='<?php echo ($row['grp_products'] != '*') ? attr($row['grp_products']) : ""; ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<input type='checkbox' name='form_diags' <?php echo ($row['grp_diags']) ? "checked" : ""; ?> />
|
||
|
<?php echo xlt('Show Diagnoses Section'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='text' class='form-control' size='40' name='form_diags_codes' onclick='sel_related(this, "ICD10")' value='<?php echo ($row['grp_diags'] != '*') ? attr($row['grp_diags']) : ""; ?>' />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<input type='checkbox' name='form_referrals' <?php echo ($row['grp_referrals']) ? "checked" : ""; ?> />
|
||
|
<?php echo xlt('Show Referrals Section'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<input type='checkbox' name='form_init_open' <?php echo ($row['grp_init_open']) ? "checked" : ""; ?> />
|
||
|
<?php echo xlt('Initially Open Sections'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php } else { // else this is a group ?>
|
||
|
<tr>
|
||
|
<td valign='top' width='1%' nowrap>
|
||
|
<?php echo xlt('Initially Open Group'); ?>
|
||
|
</td>
|
||
|
<td>
|
||
|
<input type='checkbox' name='form_init_open' <?php echo ($row['grp_init_open']) ? "checked" : ""; ?> />
|
||
|
</td>
|
||
|
</tr>
|
||
|
|
||
|
<?php } ?>
|
||
|
|
||
|
</table>
|
||
|
|
||
|
<input type='submit' class='btn btn-primary' name='form_submit' value='<?php echo xla('Submit'); ?>' />
|
||
|
<input type='button' class='btn btn-secondary' value='<?php echo xla('Cancel'); ?>' onclick='window.close()' />
|
||
|
</center>
|
||
|
</form>
|
||
|
<script>
|
||
|
<?php
|
||
|
if ($alertmsg) {
|
||
|
echo " alert(" . js_escape($alertmsg) . ");\n";
|
||
|
echo " window.close();\n";
|
||
|
}
|
||
|
?>
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|