Http (#3926)
[openemr.git] / custom / import_xml.php
blob0541a0cfb33866724b52b603814179ba53af011b
1 <?php
3 /**
4 * Imports patient demographics from our custom XML format.
6 * @package OpenEMR
7 * @link http://www.open-emr.org
8 * @author Rod Roark <rod@sunsetsystems.com>
9 * @author Roberto Vasquez <robertogagliotta@gmail.com>
10 * @copyright Copyright (c) 2005 Rod Roark <rod@sunsetsystems.com>
11 * @copyright Copyright (c) 2017 Roberto Vasquez <robertogagliotta@gmail.com>
12 * @license https://github.com/openemr/openemr/blob/master/LICENSE GNU General Public License 3
15 require_once("../interface/globals.php");
16 require_once("$srcdir/patient.inc");
18 use OpenEMR\Common\Acl\AclMain;
19 use OpenEMR\Common\Csrf\CsrfUtils;
20 use OpenEMR\Core\Header;
22 function setInsurance($pid, $ainsurance, $asubscriber, $seq)
24 $iwhich = $seq == '2' ? "secondary" : ($seq == '3' ? "tertiary" : "primary");
25 newInsuranceData(
26 $pid,
27 $iwhich,
28 $ainsurance["provider$seq"],
29 $ainsurance["policy$seq"],
30 $ainsurance["group$seq"],
31 $ainsurance["name$seq"],
32 $asubscriber["lname$seq"],
33 $asubscriber["mname$seq"],
34 $asubscriber["fname$seq"],
35 $asubscriber["relationship$seq"],
36 $asubscriber["ss$seq"],
37 fixDate($asubscriber["dob$seq"]),
38 $asubscriber["street$seq"],
39 $asubscriber["zip$seq"],
40 $asubscriber["city$seq"],
41 $asubscriber["state$seq"],
42 $asubscriber["country$seq"],
43 $asubscriber["phone$seq"],
44 $asubscriber["employer$seq"],
45 $asubscriber["employer_street$seq"],
46 $asubscriber["employer_city$seq"],
47 $asubscriber["employer_zip$seq"],
48 $asubscriber["employer_state$seq"],
49 $asubscriber["employer_country$seq"],
50 $ainsurance["copay$seq"],
51 $asubscriber["sex$seq"]
55 // Check authorization.
56 if (!AclMain::aclCheckCore('patients', 'demo', '', 'write')) {
57 die("Updating demographics is not authorized.");
60 if ($_POST['form_import']) {
61 if (!CsrfUtils::verifyCsrfToken($_POST["csrf_token_form"])) {
62 CsrfUtils::csrfNotVerified();
65 $apatient = array();
66 $apcp = array();
67 $aemployer = array();
68 $ainsurance = array();
69 $asubscriber = array();
71 // $probearr is an array of tag names corresponding to the current
72 // container in the tree structure. $probeix is the current level.
73 $probearr = array('');
74 $probeix = 0;
76 $inspriority = '0'; // 1 = primary, 2 = secondary, 3 = tertiary
78 $parser = xml_parser_create();
79 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
80 $xml = array();
82 if (xml_parse_into_struct($parser, $_POST['form_import_data'], $xml)) {
83 foreach ($xml as $taginfo) {
84 $tag = strtolower($taginfo['tag']);
85 $tagtype = $taginfo['type'];
86 $tagval = addslashes($taginfo['value']);
88 if ($tagtype == 'open') {
89 ++$probeix;
90 $probearr[$probeix] = $tag;
91 continue;
94 if ($tagtype == 'close') {
95 --$probeix;
96 continue;
99 if ($tagtype != 'complete') {
100 die("Invalid tag type '$tagtype'");
103 if ($probeix == 1 && $probearr[$probeix] == 'patient') {
104 $apatient[$tag] = $tagval;
105 } elseif ($probeix == 2 && $probearr[$probeix] == 'pcp') {
106 $apcp[$tag] = $tagval;
107 } elseif ($probeix == 2 && $probearr[$probeix] == 'employer') {
108 $aemployer[$tag] = $tagval;
109 } elseif ($probeix == 2 && $probearr[$probeix] == 'insurance') {
110 if ($tag == 'priority') {
111 $inspriority = $tagval;
112 } else {
113 $ainsurance["$tag$inspriority"] = $tagval;
115 } elseif ($probeix == 3 && $probearr[$probeix] == 'subscriber') {
116 $asubscriber["$tag$inspriority"] = $tagval;
117 } else {
118 $alertmsg = "Invalid tag \"" . $probearr[$probeix] . "\" at level $probeix";
121 } else {
122 $alertmsg = "Invalid import data!";
125 xml_parser_free($parser);
127 $olddata = getPatientData($pid);
129 if ($olddata['squad'] && ! AclMain::aclCheckCore('squads', $olddata['squad'])) {
130 die("You are not authorized to access this squad.");
133 newPatientData(
134 $olddata['id'],
135 $apatient['title'],
136 $apatient['fname'],
137 $apatient['lname'],
138 $apatient['mname'],
139 $apatient['sex'],
140 fixDate($apatient['dob']),
141 $apatient['street'],
142 $apatient['zip'],
143 $apatient['city'],
144 $apatient['state'],
145 $apatient['country'],
146 $apatient['ss'],
147 $apatient['occupation'],
148 $apatient['phone_home'],
149 $apatient['phone_biz'],
150 $apatient['phone_contact'],
151 $apatient['status'],
152 $apatient['contact_relationship'],
153 $apatient['referrer'],
154 $apatient['referrerID'],
155 $apatient['email'],
156 $apatient['language'],
157 $apatient['ethnoracial'],
158 $apatient['interpreter'],
159 $apatient['migrantseasonal'],
160 $apatient['family_size'],
161 $apatient['monthly_income'],
162 $apatient['homeless'],
163 fixDate($apatient['financial_review']),
164 $apatient['pubpid'],
165 $pid,
166 $olddata['providerID'],
167 $apatient['genericname1'],
168 $apatient['genericval1'],
169 $apatient['genericname2'],
170 $apatient['genericval2'],
171 $apatient['billing_note'],
172 $apatient['phone_cell'],
173 $apatient['hipaa_mail'],
174 $apatient['hipaa_voice'],
175 $olddata['squad']
178 newEmployerData(
179 $pid,
180 $aemployer['name'],
181 $aemployer['street'],
182 $aemployer['zip'],
183 $aemployer['city'],
184 $aemployer['state'],
185 $aemployer['country']
188 setInsurance($pid, $ainsurance, $asubscriber, '1');
189 setInsurance($pid, $ainsurance, $asubscriber, '2');
190 setInsurance($pid, $ainsurance, $asubscriber, '3');
192 echo "<html>\n<body>\n<script>\n";
193 if ($alertmsg) {
194 echo " alert('" . addslashes($alertmsg) . "');\n";
197 echo " if (!opener.closed && opener.refreshme) opener.refreshme();\n";
198 echo " window.close();\n";
199 echo "</script>\n</body>\n</html>\n";
200 exit();
203 <html>
204 <head>
205 <?php Header::setupHeader(); ?>
206 <title><?php echo xlt('Import Patient Demographics XML'); ?></title>
207 </head>
208 <body class="body_top" onload="javascript:document.forms[0].form_import_data.focus()">
209 <form method='post' action="import_xml.php" onsubmit="return top.restoreSession()">
210 <input type="hidden" name="csrf_token_form" value="<?php echo attr(CsrfUtils::collectCsrfToken()); ?>" />
211 <div class="container">
212 <div class="row">
213 <div class="col-12">
214 <div class="form-group"></div>
215 <div class="form-group">
216 <textarea name='form_import_data' class='form-control' rows='10'></textarea>
217 </div>
218 <div class="form-group text-right">
219 <div class="btn-group" role="group">
220 <button type='submit' class='btn btn-secondary btn-save' name='form_import' value='bn_import'>
221 <?php echo xlt('Import'); ?>
222 </button>
223 <button type="button" class="btn btn-link btn-cancel" onclick="dlgclose()">
224 <?php echo xlt("Cancel"); ?>
225 </button>
226 </div>
227 </div>
228 </div>
229 </div>
230 </div>
231 </form>
232 </body>
233 </html>