initial support for multiple browser windows
[openemr.git] / interface / forms / CAMOS / new.php
blob5495746dd91875ceec94c5c2ffd524d2f9071c01
1 <?php
2 include_once("../../globals.php");
3 include_once("../../../library/api.inc");
4 include_once("../../../library/sql.inc");
5 formHeader("Form: CAMOS");
6 $returnurl = $GLOBALS['concurrent_layout'] ? 'encounter_top.php' : 'patient_encounter.php';
7 ?>
11 $select_size = 20;
12 $textarea_rows = 25;
13 $textarea_cols = 55;
14 $debug = '';
15 $error = '';
16 $previous_encounter_data = '<hr><p>'. xl('Previous Encounter CAMOS entries') .'</p><hr>';
17 //get data from previous encounter to show at bottom of form for reference
18 $query = "SELECT t1.category, t1.subcategory, t1.item, t1.content FROM form_CAMOS as t1 JOIN forms as t2 on (t1.id = t2.form_id) where t2.encounter=(select max(encounter) from forms where form_name like 'CAMOS%' and encounter < ".$_SESSION['encounter']." and pid=".$_SESSION['pid'].") and t1.pid=".$_SESSION['pid'];
19 $statement = sqlStatement($query);
20 while ($result = sqlFetchArray($statement)) {
21 $previous_encounter_data .= $result['category']." | ".$result['subcategory']." | ".$result['item']."<p><pre>".$result['content']."</pre></p><hr>";
24 //end of get data from previous encounter
25 //variables for preselect section below (after handle database changes):
26 $preselect_category = '';
27 $preselect_subcategory = '';
28 $preselect_item= '';
29 $preselect_category_override = '';
30 $preselect_subcategory_override = '';
31 $preselect_item_override = '';
32 if ($_POST['hidden_category']) {$preselect_category = $_POST['hidden_category'];}
33 if ($_POST['hidden_subcategory']) {$preselect_subcategory = $_POST['hidden_subcategory'];}
34 if ($_POST['hidden_item']) {$preselect_item = $_POST['hidden_item'];}
35 //handle changes to database
36 if ($_POST['hidden_mode'] == 'add') {
37 if ($_POST['hidden_selection'] == 'change_category') {
38 $preselect_category_override = $_POST['change_category'];
39 $query = "INSERT INTO form_CAMOS_category (category) values ('";
40 $query .= $_POST['change_category']."')";
41 sqlInsert($query);
43 else if ($_POST['hidden_selection'] == 'change_subcategory') {
44 $preselect_subcategory_override = $_POST['change_subcategory'];
45 $category_id = $_POST['hidden_category'];
46 if ($category_id >= 0 ) {
47 $query = "INSERT INTO form_CAMOS_subcategory (subcategory, category_id) values ('";
48 $query .= $_POST['change_subcategory']."', '".$category_id."')";
49 sqlInsert($query);
52 else if ($_POST['hidden_selection'] == 'change_item') {
53 $preselect_item_override = $_POST['change_item'];
54 $category_id = $_POST['hidden_category'];
55 $subcategory_id = $_POST['hidden_subcategory'];
56 if (($category_id >= 0 ) && ($subcategory_id >=0)) {
57 $query = "INSERT INTO form_CAMOS_item (item, content, subcategory_id) values ('";
58 $query .= $_POST['change_item']."', '".$_POST['textarea_content']."', '".$subcategory_id."')";
59 sqlInsert($query);
63 else if ($_POST['hidden_selection'] == 'change_content') {
64 $item_id = $_POST['hidden_item'];
65 $content = $_POST['textarea_content'];
66 if ($item_id >= 0) {
67 $query = "UPDATE form_CAMOS_item set content = '".$content."' where id = ".$item_id;
68 sqlInsert($query);
72 else if ($_POST['hidden_mode'] == 'delete') {
73 if ($_POST['hidden_selection'] == 'change_category') {
74 $to_delete_id = $_POST['hidden_category'];
75 $to_delete_from_table = 'form_CAMOS_category';
76 $to_delete_from_subtable = 'form_CAMOS_subcategory';
77 $tablename = 'category';
78 $subtablename = 'subcategory';
80 else if ($_POST['hidden_selection'] == 'change_subcategory') {
81 $to_delete_id = $_POST['hidden_subcategory'];
82 $to_delete_from_table = 'form_CAMOS_subcategory';
83 $to_delete_from_subtable = 'form_CAMOS_item';
84 $tablename = 'subcategory';
85 $subtablename = 'item';
87 else if ($_POST['hidden_selection'] == 'change_item') {
88 $to_delete_id = $_POST['hidden_item'];
89 $to_delete_from_table = 'form_CAMOS_item';
90 $to_delete_from_subtable = '';
91 $tablename = 'item';
92 $subtablename = '';
95 if ($subtablename == '') {
96 $query = "DELETE FROM ".$to_delete_from_table." WHERE id like '".$to_delete_id."'";
97 sqlInsert($query);
99 else {
100 $query = "SELECT count(id) FROM ".$to_delete_from_subtable." WHERE ".$tablename."_id like '".$to_delete_id."'";
101 $statement = sqlStatement($query);
102 if ($result = sqlFetchArray($statement)) {
103 if ($result['count(id)'] == 0) {
104 $query = "DELETE FROM ".$to_delete_from_table." WHERE id like '".$to_delete_id."'";
105 sqlInsert($query);
107 else {
108 $error = $subtablename." not empty!";
113 else if ($_POST['hidden_mode'] == 'alter') {
114 $newval = $_POST[$_POST['hidden_selection']];
115 if ($_POST['hidden_selection'] == 'change_category') {
116 $to_alter_id = $_POST['hidden_category'];
117 $to_alter_table = 'form_CAMOS_category';
118 $to_alter_column = 'category';
120 else if ($_POST['hidden_selection'] == 'change_subcategory') {
121 $to_alter_id = $_POST['hidden_subcategory'];
122 $to_alter_table = 'form_CAMOS_subcategory';
123 $to_alter_column = 'subcategory';
125 else if ($_POST['hidden_selection'] == 'change_item') {
126 $to_alter_id = $_POST['hidden_item'];
127 $to_alter_table = 'form_CAMOS_item';
128 $to_alter_column = 'item';
130 $query = "UPDATE ".$to_alter_table." set ".$to_alter_column." = '".$newval."' where id = ".$to_alter_id;
131 sqlInsert($query);
133 // end handle changes to database
135 //preselect column items
136 //either a database change has been made, so the user should be made to feel that they never left the same CAMOS screen
137 //or, CAMOS has been started freshly, therefore the last entry of the current patient should be selected.
138 $preselect_mode = '';
139 if ($preselect_category == '') {
140 $preselect_mode = 'by name';
141 //at this point, if this variable has not been set, CAMOS must have been start over
142 //so let's get the most recent values from form_CAMOS for this patient's pid
143 $query = "SELECT category, subcategory, item FROM form_CAMOS WHERE id =(SELECT max(id) from form_CAMOS WHERE pid=".$_SESSION['pid'].")";
144 $statement = sqlStatement($query);
145 if ($result = sqlFetchArray($statement)) {
146 $preselect_category = $result['category'];
147 $preselect_subcategory = $result['subcategory'];
148 $preselect_item = $result['item'];
150 else {$preselect_mode = '';}
152 else {
153 $preselect_mode = 'by number';
156 //end preselect column items
159 <html><head>
160 <link rel=stylesheet href="<?echo $css_header;?>" type="text/css">
162 <script language="javascript" type="text/javascript">
164 var array1 = new Array();
165 var array2 = new Array();
166 var array3 = new Array();
167 var icd9_list = '';
168 var preselect_off = false;
169 var content_change_flag = false;
170 var lock_override_flag = false;
172 //deal with locking of content = prevent accidental overwrite
174 function trimString (str) {
175 str = this != window? this : str;
176 return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
178 function isLocked() {
179 f2 = document.CAMOS;
180 if (lock_override_flag) {
181 lock_override_flag = false;
182 return false;
184 return /\/\*\s*lock\s*\:\:\s*\*\//.test(f2.textarea_content.value);
186 function lock_content() {
187 f2 = document.CAMOS;
188 if ((trimString(f2.textarea_content.value) != "") && (!isLocked())) {
189 f2.textarea_content.value = f2.textarea_content.value + "\n\n" + "/*lock::*/";
190 lock_override_flag = true;
191 js_button('add','change_content');
194 function allSelected() {
195 var f2 = document.CAMOS;
196 if ( (f2.select_category.selectedIndex < 0) || (f2.select_subcategory.selectedIndex < 0) || (f2.select_item.selectedIndex < 0) ) {
197 return false; //one of the columns is not selected
199 else {
200 return true; //all columns have a selection
204 function content_focus() {
205 if (content_change_flag == false) {
206 if (!allSelected()) {
207 alert("If you add text to the 'content' box without a selection in each column (category, subcategory, item), you will likely lose your work.")
210 else {return;}
211 content_change_flag = true;
213 function content_blur() {
214 if (content_change_flag == true) {
215 content_change_flag = false;
219 //ICD9
220 $icd9_flag = false;
221 $query = "SELECT code_text, code FROM billing WHERE encounter=".$_SESSION['encounter'].
222 " AND pid=".$_SESSION['pid']." AND code_type like 'ICD9'";
223 $statement = sqlStatement($query);
224 if ($result = sqlFetchArray($statement)) {
225 $icd9_flag = true;
226 echo "icd9_list = \"\\n\\n\\\n";
227 echo $result['code']." ".$result['code_text']."\\n\\\n";
229 while ($result = sqlFetchArray($statement)) {
230 echo $result['code']." ".$result['code_text']."\\n\\\n";
232 if ($icd9_flag) {echo "\";\n";}
234 $query = "SELECT id, category FROM form_CAMOS_category ORDER BY category";
235 $statement = sqlStatement($query);
236 $i = 0;
237 while ($result = sqlFetchArray($statement)) {
238 echo "array1[".$i."] = new Array('".$result['category']."','".$result['id']."', new Array());\n";
239 $i++;
241 $i=0;
242 $query = "SELECT id, subcategory, category_id FROM form_CAMOS_subcategory ORDER BY subcategory";
243 $statement = sqlStatement($query);
244 while ($result = sqlFetchArray($statement)) {
245 echo "array2[".$i."] = new Array('".$result['subcategory']."', '".$result['category_id']."', '".$result['id']."', new Array());\n";
246 $i++;
248 $i=0;
249 $query = "SELECT id, item, content, subcategory_id FROM form_CAMOS_item ORDER BY item";
250 $statement = sqlStatement($query);
251 while ($result = sqlFetchArray($statement)) {
252 echo "array3[".$i."] = new Array('".$result['item']."', '".str_replace(array("\r","\n","'","\""),array("\\r","\\n","\\'","\\\""),strip_tags($result['content'],"<b>,<i>"))."', '".$result['subcategory_id'].
253 "','".$result['id']."');\n";
254 $i++;
258 function append_icd9() {
259 var f2 = document.CAMOS;
260 f2.textarea_content.value = f2.textarea_content.value + icd9_list;
263 function select_word(mode, mystring, myselect) { //take a string and select it in a select box if present
264 if (preselect_off) return 0;
265 for (var i=0;i<myselect.length;i++) {
266 var match = '';
267 if (mode == 'by name') {
268 match = myselect.options[i].text;
270 else if (mode == 'by number') {
271 match = myselect.options[i].value;
273 else {return 0;}
274 if (match == mystring) {
275 myselect.selectedIndex = i;
278 return 1;
281 function init() {
282 var f2 = document.CAMOS;
283 for (i1=0;i1<array1.length;i1++) {
284 f2.select_category.options[f2.select_category.length] = new Option(array1[i1][0], array1[i1][1]);
287 $temp_preselect_mode = $preselect_mode;
288 if ($preselect_category_override != '') {
289 $temp_preselect_mode = "by name";
290 $preselect_category = $preselect_category_override;
293 if (select_word('<? echo $temp_preselect_mode."', '".$preselect_category; ?>' ,f2.select_category)) {
294 click_category();
298 function click_category() {
299 var f2 = document.CAMOS;
300 var category_index = f2.select_category.selectedIndex;
301 if ((category_index < 0) || (category_index > f2.select_category.length-1)) {return 0;}
302 var sel = f2.select_category.options[f2.select_category.selectedIndex].value;
303 for (var i1=0;i1<array1.length;i1++) {
304 if (array1[i1][1] == sel) {
305 f2.select_subcategory.length = 0;
306 f2.select_item.length = 0;
307 f2.textarea_content.value = '';
308 for (var i2=0;i2<array2.length;i2++) {
309 if (array1[i1][1] == array2[i2][1]) {
310 f2.select_subcategory.options[f2.select_subcategory.length] = new Option(array2[i2][0], array2[i2][2]);
316 $temp_preselect_mode = $preselect_mode;
317 if ($preselect_subcategory_override != '') {
318 $temp_preselect_mode = "by name";
319 $preselect_subcategory = $preselect_subcategory_override;
322 if (select_word('<? echo $temp_preselect_mode."', '".$preselect_subcategory; ?>' ,f2.select_subcategory)) {
323 click_subcategory();
326 function click_subcategory() {
327 var f2 = document.CAMOS;
328 var subcategory_index = f2.select_subcategory.selectedIndex;
329 if ((subcategory_index < 0) || (subcategory_index > f2.select_subcategory.length-1)) {return 0;}
330 var sel = f2.select_subcategory.options[f2.select_subcategory.selectedIndex].value;
331 for (var i1=0;i1<array2.length;i1++) {
332 if (array2[i1][2] == sel) {
333 f2.select_item.length = 0;
334 f2.textarea_content.value = '';
335 for (var i2=0;i2<array3.length;i2++) {
336 if (array2[i1][2] == array3[i2][2]) {
337 f2.select_item.options[f2.select_item.length] = new Option(array3[i2][0], array3[i2][3]);
343 $temp_preselect_mode = $preselect_mode;
344 if ($preselect_item_override != '') {
345 $temp_preselect_mode = "by name";
346 $preselect_item = $preselect_item_override;
349 if (select_word('<? echo $temp_preselect_mode."', '".$preselect_item; ?>' ,f2.select_item)) {
350 click_item();
351 preselect_off = true;
354 function click_item() {
355 var f2 = document.CAMOS;
356 var item_index = f2.select_item.selectedIndex;
357 if ((item_index < 0) || (item_index > f2.select_item.length-1)) {return 0;}
358 var sel = f2.select_item.options[item_index].value;
359 for (var i1=0;i1<array3.length;i1++) {
360 if (array3[i1][3] == sel) {
361 f2.textarea_content.value= array3[i1][1];
366 function selectContains(myselect, str) {
367 for (var i=0;i<myselect.length;i++) {
368 if (myselect.options[i].text == trimString(str)) {return true;}
372 function js_button(mode,selection) {
373 var f2 = document.CAMOS;
374 //check lock first
375 if ( (mode == 'add') && (selection == 'change_content') && (isLocked()) ) {
376 alert("You have attempted to alter content which is locked.\nRemove the lock if you want to do this.\nTo unlock, remove the line, '/*lock::*/'");
377 return;
379 //end check lock
381 //check for blank or duplicate submissions
382 if ( (mode == 'add') || (mode == 'alter') ) {
383 if (selection == 'change_category') {
384 if (trimString(f2.change_category.value) == "") {
385 alert("You cannot add a blank value for a category!");
386 return;
388 if (selectContains(f2.select_category, trimString(f2.change_category.value))) {
389 alert("There is already a category named "+f2.change_category.value+".");
390 return;
393 if (selection == 'change_subcategory') {
394 if (trimString(f2.change_subcategory.value) == "") {
395 alert("You cannot add a blank value for a subcategory!");
396 return;
398 if (selectContains(f2.select_subcategory, trimString(f2.change_subcategory.value))) {
399 alert("There is already a subcategory named "+f2.change_subcategory.value+".");
400 return;
403 if (selection == 'change_item') {
404 if (trimString(f2.change_item.value) == "") {
405 alert("You cannot add a blank value for an item!");
406 return;
408 if (selectContains(f2.select_item, trimString(f2.change_item.value))) {
409 alert("There is already an item named "+f2.change_item.value+".");
410 return;
414 //end of check for blank or duplicate submissions
416 if (mode == 'delete') {
417 if (!confirm("Are you sure you want to delete this item from the database?")) {
418 return;
421 var f2 = document.CAMOS;
422 var category_index = f2.select_category.selectedIndex;
423 var category;
424 if (category_index < 0) {
425 if ((selection == 'change_subcategory') || (selection == 'change_item') ||
426 (selection == 'change_content')) {
427 alert ('You have not selected a category!');
428 return;
430 category = -1;
432 else {
433 category = f2.select_category.options[category_index].value;
435 var subcategory_index = f2.select_subcategory.selectedIndex;
436 var subcategory;
437 if (subcategory_index < 0) {
438 if ((selection == 'change_item') || (selection == 'change_content')) {
439 alert ('You have not selected a subcategory!');
440 return;
442 subcategory = -1;
444 else {
445 subcategory = f2.select_subcategory.options[subcategory_index].value;
447 var item_index = f2.select_item.selectedIndex;
448 var item;
449 if (item_index < 0) {
450 if (selection == 'change_content') {
451 alert ('You have not selected an item!');
452 return;
454 item= -1;
456 else {
457 item = f2.select_item.options[item_index].value;
459 if (mode == 'submit') {
460 f2.category.value = f2.select_category.options[f2.select_category.selectedIndex].text;
461 f2.subcategory.value = f2.select_subcategory.options[f2.select_subcategory.selectedIndex].text;
462 f2.item.value = f2.select_item.options[f2.select_item.selectedIndex].text;
463 if (selection == 'submit_selection') {
464 f2.content.value = (f2.textarea_content.value).substring(f2.textarea_content.selectionStart, f2.textarea_content.selectionEnd);
466 else {f2.content.value = f2.textarea_content.value;}
467 f2.action = '<?echo $rootdir;?>/forms/CAMOS/save.php?mode=new';
468 f2.submit();
470 else {
471 f2.hidden_mode.value = mode;
472 f2.hidden_selection.value = selection;
473 f2.hidden_category.value = category;
474 f2.hidden_subcategory.value = subcategory;
475 f2.hidden_item.value = item;
476 f2.action = '<? print $GLOBALS['webroot'] ?>/interface/patient_file/encounter/load_form.php?formname=CAMOS';
477 <?php if (!$GLOBALS['concurrent_layout']) { ?>
478 f2.target = 'Main';
479 <?php } ?>
480 f2.submit();
484 function selectItem () {
485 f2 = document.CAMOS;
486 f2.item.value=f2.select_item.options[f2.select_item.selectedIndex].text;
487 f2.content.value = f2.textarea_content.value;
490 </script>
491 </head>
492 <body <?echo $top_bg_line;?> topmargin=0 rightmargin=0 leftmargin=2 bottommargin=0 marginwidth=2 marginheight=0 onload="init()">
493 <form method=post action="<?echo $rootdir;?>/forms/CAMOS/save.php?mode=new" name="CAMOS">
496 if ($error != '') {
497 echo "<h1> error: ".$error."</h1>\n";
500 <table border=1>
501 <tr>
502 <td>
503 <?php xl('Category','e');?>
504 </td>
505 <td>
506 <?php xl('Subcategory','e');?>
507 </td>
508 <td>
509 <?php xl('Item','e');?>
510 </td>
511 <td>
512 <?php xl('Content','e');?>
513 </td>
514 </tr>
516 <tr>
517 <td>
518 <select name=select_category size=<? echo $select_size ?> onchange="click_category()"></select><br>
519 <input type=text name=change_category><br>
520 <input type=button name=add1 value=add onClick="js_button('add','change_category')">
521 <input type=button name=alter1 value=alter onClick="js_button('alter','change_category')">
522 <input type=button name=del1 value=del onClick="js_button('delete','change_category')"><br>
523 </td>
524 <td>
525 <select name=select_subcategory size=<? echo $select_size ?> onchange="click_subcategory()"></select><br>
526 <input type=text name=change_subcategory><br>
527 <input type=button name=add2 value=add onClick="js_button('add','change_subcategory')">
528 <input type=button name=alter1 value=alter onClick="js_button('alter','change_subcategory')">
529 <input type=button name=del2 value=del onClick="js_button('delete','change_subcategory')"><br>
530 </td>
531 <td>
532 <select name=select_item size=<? echo $select_size ?> onchange="click_item()"></select><br>
533 <input type=text name=change_item><br>
534 <input type=button name=add3 value=add onClick="js_button('add','change_item')">
535 <input type=button name=alter1 value=alter onClick="js_button('alter','change_item')">
536 <input type=button name=del3 value=del onClick="js_button('delete','change_item')"><br>
537 </td>
538 <td>
539 <textarea name=textarea_content cols=<? echo $textarea_cols ?> rows=<? echo $textarea_rows ?> onFocus="content_focus()" onBlur="content_blur()"></textarea><br>
540 <input type=button name=add4 value=add onClick="js_button('add','change_content')">
541 <input type=button name=icd9 value=icd9 onClick="append_icd9()">
542 <input type=button name=lock value=lock onClick="lock_content()">
543 </td>
544 </tr>
545 </table>
547 <input type=hidden name=hidden_mode>
548 <input type=hidden name=hidden_selection>
549 <input type=hidden name=hidden_category>
550 <input type=hidden name=hidden_subcategory>
551 <input type=hidden name=hidden_item>
553 <input type=hidden name=category>
554 <input type=hidden name=subcategory>
555 <input type=hidden name=item>
556 <input type=hidden name=content>
557 <input type=button name='submit form' value='submit all content' onClick="js_button('submit','submit')">
558 <input type=button name='submit form' value='submit selected content' onClick="js_button('submit','submit_selection')">
560 echo "<a href='".$GLOBALS['webroot'] .
561 "/interface/patient_file/encounter/$returnurl' onclick='top.restoreSession()'>[" .
562 xl('do not save'). "]</a>";
563 echo "<a href='" . $GLOBALS['webroot'] . "/interface/forms/CAMOS/help.html' target='new'> | [" .
564 xl ('help'). "]</a>";
565 echo $previous_encounter_data;
568 </form>
569 <?php
570 formFooter();