4 * Questionnaire Template
7 * @link https://www.open-emr.org
8 * @author Jerry Padgett <sjpadgett@gmail.com>
9 * @copyright Copyright (c) 2022 Jerry Padgett <sjpadgett@gmail.com>
10 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
13 require_once(__DIR__
. "/../src/Common/Forms/CoreFormToPortalUtility.php");
15 use OpenEMR\Common\Forms\CoreFormToPortalUtility
;
16 use OpenEMR\Core\Header
;
17 use OpenEMR\Services\QuestionnaireService
;
19 // block of code to securely support use by the patient portal
20 $patientPortalSession = CoreFormToPortalUtility
::isPatientPortalSession($_GET);
21 if ($patientPortalSession) {
22 $ignoreAuth_onsite_portal = true;
25 require_once(__DIR__
. "/../interface/globals.php");
27 $mode = $_REQUEST['mode'] ??
'';
28 $q = $_REQUEST['qId'] ??
null;
29 $q_file = $_REQUEST['importFile'] ??
null;
30 $q_name = $_REQUEST['name'] ??
null;
33 $templateService = new QuestionnaireService();
34 $resource = $templateService->fetchQuestionnaireResource($q, $q);
35 $q_json = $resource['questionnaire'];
36 $lform = $resource['lform'];
42 <title
><?php
echo xlt('Portal'); ?
> |
<?php
echo xlt('Questionnaire'); ?
></title
>
43 <?php Header
::setupHeader(['opener']); ?
>
46 let baseMsg
= xl('Convert and verify import');
48 function renderForm(type
) {
49 if (type
=== 'lForm') {
50 LForms
.Util
.addFormToPage(lform
, 'formContainer');
51 baseMsg
= xl('Rendering LHC Form');
53 LForms
.Util
.addFormToPage(qform
, 'formContainer');
54 baseMsg
= xl('Rendering Questionnaire');
56 document
.getElementById('subtitle').innerHTML
= baseMsg
;
60 opener
.callBackCmd
= '';
65 opener
.callBackCmd
= 'submit';
66 opener
.document
.getElementById('q_mode').value
= formMode
;
67 dlgclose('doImportSubmit');
70 function doManualImport() {
71 $
('.isRender').toggleClass('d-none');
72 let content
= document
.getElementById('q_import').value
;
73 if (content
.length
> 80) {
74 typeAndConvert(content
);
76 $
('.isRender').toggleClass('d-none');
77 alertMsg(xl("You must enter valid form json."), 5000, 'danger', false);
81 function renderManualImport() {
82 $
('.isManual').toggleClass('d-none');
85 // convert import to all definitions available
86 // store in parent upload form
89 function typeAndConvert(file
, displayMsg
= true) {
90 let obj
= JSON
.parse(file
);
91 // reformat file to get rid of lf
92 file
= JSON
.stringify(obj
)
93 if (obj
&& obj
.resourceType
=== "Questionnaire") {
99 // convert to questionnaire
100 qform
= LForms
.Util
.getFormFHIRData("Questionnaire", 'R4', obj
);
102 opener
.document
.getElementById('questionnaire').value
= JSON
.stringify(qform
);
103 opener
.document
.getElementById('lform').value
= file
;
104 baseMsg +
= ' ' +
xl('Rendering LHC-Form');
105 LForms
.Util
.addFormToPage(opener
.document
.getElementById('lform').value
, 'formContainer');
108 lform
= LForms
.Util
.convertFHIRQuestionnaireToLForms(obj
, 'R4');
110 opener
.document
.getElementById('lform').value
= JSON
.stringify(lform
);
111 opener
.document
.getElementById('questionnaire').value
= file
;
112 baseMsg +
= ' ' +
xl('Rendering Questionnaire');
113 LForms
.Util
.addFormToPage(opener
.document
.getElementById('questionnaire').value
, 'formContainer');
115 alert(xl('Error! Import conversion failed.'));
120 document
.getElementById('subtitle').innerHTML
= baseMsg
;
124 function readQuestionnaireFile() {
125 // grab first file from parent
126 const file
= opener
.document
.getElementById("fetch_files").files
.item(0)
128 let reader
= new FileReader();
129 reader
.readAsText(file
);
130 reader
.addEventListener('load', (evt
) => {
131 return typeAndConvert(evt
.target
.result
);
133 reader
.addEventListener('onerror', (evt
) => {
134 alert("Error reading file");
141 let qr
= LForms
.Util
.getFormFHIRData('QuestionnaireResponse', 'R4');
142 let formElement
= opener
.document
.getElementById("formContainer");
143 let data
= LForms
.Util
.getUserData(formElement
, true, true, true);
144 window
.alert(JSON
.stringify(data
, null, 2));
145 window
.alert(JSON
.stringify(qr
, null, 2));
151 <div
class="container-xl mt-2">
153 <h3
><?php
echo xlt("FHIR Questionnaire"); ?
><small id
="subtitle" class="ml-2"></small
></h3
>
156 <div
class="isManual isRender d-none">
157 <label
for="q_import"><strong
><?php
echo xlt("To manually import paste json here"); ?
></strong
></label
>
158 <textarea id
="q_import" cols
="120" rows
="20" class="form-control"></textarea
>
161 <button type
="button" class="isManual btn btn-sm btn-primary btn-save d-none" onclick
="doManualImport()"><?php
echo xlt("Render"); ?
></button
>
162 <button type
="button" class="isManual isRender btn btn-sm btn-primary btn-save" onclick
="doImport()"><?php
echo xlt("Import"); ?
></button
>
163 <div
class="btn-group">
164 <button type
="button" class="isManual isRender btn btn-sm btn-success" onclick
="renderForm('lForm')"><?php
echo xlt("LHC Form Version"); ?
></button
>
165 <button type
="button" class="isManual isRender btn btn-sm btn-success" onclick
="renderForm('qForm')"><?php
echo xlt("Questionnaire Version"); ?
></button
>
167 <button type
="button" class="isManual isRender btn btn-sm btn-primary btn-save" onclick
="saveQR()"><?php
echo xlt("View Response"); ?
></button
>
168 <button type
="button" class="btn btn-sm btn-secondary btn-cancel" onclick
="doCancel()"><?php
echo xlt("Cancel"); ?
></button
>
170 <div id
=formContainer
></div
>
171 <div
class="isManual isRender d-none">
172 <label
for="q_import"><strong
><?php
echo xlt("To manually import paste json here"); ?
></strong
></label
>
173 <textarea id
="q_import" cols
="120" rows
="20" class="form-control"></textarea
>
176 <button type
="button" class="isManual btn btn-sm btn-primary btn-save d-none" onclick
="doManualImport()"><?php
echo xlt("Render"); ?
></button
>
177 <button type
="button" class="isManual isRender btn btn-sm btn-primary btn-save" onclick
="doImport()"><?php
echo xlt("Import"); ?
></button
>
178 <div
class="btn-group">
179 <button type
="button" class="isManual isRender btn btn-sm btn-success" onclick
="renderForm('lForm')"><?php
echo xlt("LHC Form Version"); ?
></button
>
180 <button type
="button" class="isManual isRender btn btn-sm btn-success" onclick
="renderForm('qForm')"><?php
echo xlt("Questionnaire Version"); ?
></button
>
182 <button type
="button" class="isManual isRender btn btn-sm btn-primary btn-save" onclick
="saveQR()"><?php
echo xlt("View Response"); ?
></button
>
183 <button type
="button" class="btn btn-sm btn-secondary btn-cancel" onclick
="doCancel()"><?php
echo xlt("Cancel"); ?
></button
>
187 <?php
require(__DIR__
. "/../interface/forms/questionnaire_assessments/lform_webcomponents.php") ?
>
190 let formMode
= <?php
echo js_escape($mode); ?
>;
191 <?php
if ($mode == 'render_import') { ?
>
192 window
.onload
= readQuestionnaireFile();
193 <?php
} elseif ($mode == 'render_import_manual') { ?
>
194 window
.onload
= renderManualImport();