Highway to PSR2
[openemr.git] / interface / main / calendar / modules / PostCalendar / pnuser.php
blobb7282e2b146e43390b782389d93a2379e186e5aa
1 <?php
2 @define('__POSTCALENDAR__', 'PostCalendar');
3 /**
4 * $Id$
6 * PostCalendar::PostNuke Events Calendar Module
7 * Copyright (C) 2002 The PostCalendar Team
8 * http://postcalendar.tv
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * To read the license please read the docs/license.txt or visit
25 * http://www.gnu.org/copyleft/gpl.html
29 //=========================================================================
30 // Load the API Functions and Language defines
31 //=========================================================================
32 pnModAPILoad(__POSTCALENDAR__, 'user');
34 // Added to improve security and standardization of input data to be used in
35 // database insertion.
37 //=========================================================================
38 // start the main postcalendar application
39 //=========================================================================
40 function postcalendar_user_main()
42 // check the authorization
44 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) {
45 return _POSTCALENDARNOAUTH;
48 // get the date and go to the view function
49 $Date = postcalendar_getDate();
50 return postcalendar_user_view(array('Date'=>$Date));
54 /**
55 * view items
56 * This is a standard function to provide an overview of all of the items
57 * available from the module.
59 function postcalendar_user_view()
61 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) {
62 return _POSTCALENDARNOAUTH;
65 // get the vars that were passed in
66 list($Date,
67 $print,
68 $viewtype,
69 $jumpday,
70 $jumpmonth,
71 $jumpyear) = pnVarCleanFromInput(
72 'Date',
73 'print',
74 'viewtype',
75 'jumpday',
76 'jumpmonth',
77 'jumpyear'
79 $Date =postcalendar_getDate();
80 if (!isset($viewtype)) {
81 $viewtype = _SETTING_DEFAULT_VIEW;
84 // added to allow the view & providers to remain as the user last saw it -- JRM
85 if ($_SESSION['viewtype']) {
86 $viewtype = $_SESSION['viewtype'];
89 if ($_SESSION['pc_username']) {
90 $pc_username = $_SESSION['pc_username'];
93 return postcalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date,'print'=>$print)) . postcalendar_footer();
96 /**
97 * display item
98 * This is a standard function to provide detailed information on a single item
99 * available from the module.
101 function postcalendar_user_display($args)
103 list($eid, $viewtype, $tplview,
104 $pc_username, $Date, $print, $category, $topic, $pc_facility) = pnVarCleanFromInput(
105 'eid',
106 'viewtype',
107 'tplview',
108 'pc_username',
109 'Date',
110 'print',
111 'pc_category',
112 'pc_topic',
113 'pc_facility'
115 // added to allow the view & providers to remain as the user last saw it -- JRM
116 if ($_SESSION['viewtype']) {
117 $viewtype = $_SESSION['viewtype'];
120 if ($_SESSION['pc_username']) {
121 $pc_username = $_SESSION['pc_username'];
124 // funky things happen if the view is 'details' and we don't have an event ID
125 // so in such a case, we're going to revert to the 'day' view -- JRM
126 if ($viewtype == 'details' && (!isset($eid) || $eid == "")) {
127 $_SESSION['viewtype'] = 'day';
128 $viewtype = $_SESSION['viewtype'];
131 extract($args);
132 if (empty($Date) && empty($viewtype)) {
133 return false;
136 if (empty($tplview)) {
137 $tplview = 'default';
140 $uid = pnUserGetVar('uid');
141 $theme = pnUserGetTheme();
143 //$cacheid = md5($Date.$viewtype.$tplview._SETTING_TEMPLATE.$eid.$print.$uid.'u'.$pc_username.$theme.'c'.$category.'t'.$topic);
144 $cacheid = md5(strtotime("now"));
146 switch ($viewtype) {
147 case 'details':
148 if (!(bool)PC_ACCESS_READ) {
149 return _POSTCALENDARNOAUTH;
152 $event = pnModAPIFunc('PostCalendar', 'user', 'eventDetail', array('eid'=>$eid,
153 'Date'=>$Date,
154 'print'=>$print,
155 'cacheid'=>$cacheid));
156 if ($event === false) {
157 pnRedirect(pnModURL(__POSTCALENDAR__, 'user'));
160 $out = "\n\n<!-- START user_display -->\n\n";
161 $out .= $event;
162 $out .= "\n\n<!-- END user_display -->\n\n";
163 break;
165 default:
166 if (!(bool)PC_ACCESS_OVERVIEW) {
167 return _POSTCALENDARNOAUTH;
170 $out = "\n\n<!-- START user_display -->\n\n";
171 $out .= pnModAPIFunc('PostCalendar', 'user', 'buildView', array('Date'=>$Date,
172 'viewtype'=>$viewtype,
173 'cacheid'=>$cacheid));
174 $out .= "\n\n<!-- END user_display -->\n\n";
175 break;
178 // Return the output that has been generated by this function
179 return $out;
181 function postcalendar_user_delete()
183 if (!(bool)PC_ACCESS_ADD) {
184 return _POSTCALENDAR_NOAUTH;
187 $output = new pnHTML();
188 $output->SetInputMode(_PNH_VERBATIMINPUT);
190 $uname = $_SESSION['authUser'];
191 list($action,$pc_event_id) = pnVarCleanFromInput('action', 'pc_event_id');
192 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
193 if ($uname != $event['uname']) {
194 if (!validateGroupStatus($uname, getUsername($event['uname']))) {
195 return _PC_CAN_NOT_DELETE;
199 //if($uname != $event['uname']) {
200 // return _PC_CAN_NOT_DELETE;
202 unset($event);
204 $output->FormStart(pnModUrl(__POSTCALENDAR__, 'user', 'deleteevents'));
205 $output->FormHidden('pc_eid', $pc_event_id);
206 $output->Text(_PC_DELETE_ARE_YOU_SURE.' ');
207 $output->FormSubmit(_PC_ADMIN_YES);
208 $output->FormEnd();
209 $output->Linebreak(2);
210 $output->Text(pnModAPIFunc(__POSTCALENDAR__, 'user', 'eventDetail', array('eid'=>$pc_event_id,'cacheid'=>'','print'=>0,'Date'=>'')));
211 $output->Linebreak(2);
214 return $output->GetOutput();
216 function postcalendar_user_deleteevents()
218 if (!(bool)PC_ACCESS_ADD) {
219 return _POSTCALENDAR_NOAUTH;
223 $pc_eid = pnVarCleanFromInput('pc_eid');
224 $event =& postcalendar_userapi_pcGetEventDetails($pc_eid);
225 $uname = $_SESSION['authUser'];
226 if ($uname != $event['uname']) {
227 if (!validateGroupStatus($uname, getUsername($event['uname']))) {
228 return _PC_CAN_NOT_DELETE;
232 unset($event);
234 $output = new pnHTML();
235 $output->SetInputMode(_PNH_VERBATIMINPUT);
236 list($dbconn) = pnDBGetConn();
237 $pntable = pnDBGetTables();
238 $events_table = $pntable['postcalendar_events'];
239 $events_column = &$pntable['postcalendar_events_column'];
240 //hipaa doesn't allow for actual deletes, so just change to inactive
241 //$sql = "DELETE FROM $events_table WHERE $events_column[eid] = '$pc_eid'";
242 $sql = "UPDATE $events_table SET pc_eventstatus = 0 WHERE $events_column[eid] = '$pc_eid'";
243 $dbconn->Execute($sql);
244 $tpl = new pcSmarty();
245 $template_name = _SETTING_TEMPLATE;
246 if (!isset($template_name)) {
247 $template_name = 'default';
250 $tpl->assign('STYLE', $GLOBALS['style']);
251 $output->Text($tpl->fetch($template_name . "/views/header.html"));
252 $output->Text($tpl->fetch($template_name . "/views/global/navigation.html"));
253 $output->Text("<br /><br />");
256 if ($dbconn->ErrorNo() != 0) {
257 $output->Text(_PC_ADMIN_EVENT_ERROR);
258 } else {
259 $output->Text(_PC_ADMIN_EVENTS_DELETED);
262 $output->Text($tpl->fetch($template_name . "/views/footer.html"));
263 // clear the template cache
264 $tpl->clear_all_cache();
266 return $output->GetOutput();
269 //this function is only used by the system to delete temp events used in certain
270 //collision calculations
271 function delete_event($title)
273 list($dbconn) = pnDBGetConn();
274 $pntable = pnDBGetTables();
275 $events_table = $pntable['postcalendar_events'];
276 $events_column = &$pntable['postcalendar_events_column'];
277 //this function is only used by the system to delete temp events used in certain
278 //collision calculations
279 $sql = "DELETE FROM $events_table WHERE pc_eventstatus = " ._EVENT_TEMPORARY ." AND pc_title = '$title'";
280 $dbconn->Execute($sql);
281 if ($dbconn->ErrorNo() != 0) {
282 return 0;
283 } else {
284 return 1;
289 * submit an event
291 function postcalendar_user_edit($args)
293 return postcalendar_user_submit($args);
295 function postcalendar_user_submit2($args)
298 if (!(bool)PC_ACCESS_ADD) {
299 return _POSTCALENDARNOAUTH;
302 extract($args);
303 //print_r($_GET);
304 $category = pnVarCleanFromInput('event_category');
305 //print_r($category);
306 print "dble is ".pnVarCleanFromInput('double_book')." data_loaded is ".pnVarCleanFromInput('data_loaded');
307 //print_r($_POST);
308 if (pnVarCleanFromInput('data_loaded') || !empty($category)) { //submitting
309 return postcalendar_user_submit2($agrs);
310 } else {
311 //select the category you wish to add,
312 //using the info from that category we can populate some data
314 $output = new pnHTML();
315 $output->SetInputMode(_PNH_VERBATIMINPUT);
316 $output->Text('<body bgcolor="'.$GLOBALS['style']['BGCOLOR2'].'"></body>');
317 // get the theme globals :: is there a better way to do this?
318 pnThemeLoad(pnUserGetTheme());
319 $all_categories = pnModAPIFunc(__POSTCALENDAR__, 'admin', 'getCategories');
320 $output->Text('<form name="cats" method="post" action="'.pnModURL(__POSTCALENDAR__, 'user', 'submit2', $args).'">');
321 $output->FormHidden('no_nav', $_GET['no_nav']);
322 $output->FormHidden('event_startampm', $_GET['event_startampm']);
323 $output->FormHidden('event_starttimeh', $_GET['event_starttimeh']);
324 $output->FormHidden('event_starttimem', $_GET['event_starttimem']);
325 $output->FormHidden('event_startmonth', $_GET['event_startmonth']);
326 $output->FormHidden('event_startday', $_GET['event_startday']);
327 $output->FormHidden('event_startyear', $_GET['event_startyear']);
328 $output->FormHidden('event_category', $_GET['event_category']);
329 $output->FormHidden('event_dur_minutes', $_GET['event_dur_minutes']);
330 $output->FormHidden('provider_id', $_GET['provider_id']);
331 $output->FormHidden('patient_id', $_GET['patient_id']);
332 $output->FormHidden('module', $_GET['module']);
333 $output->FormHidden('func', $_GET['func']);
334 $output->FormHidden('Date', $_GET['Date']);
335 $select = array();
337 foreach ($all_categories as $cat) {
338 array_push($select, array('name'=>$cat['name'],'id'=>base64_encode(serialize($cat))));
341 $output->Text('Select a Category');
342 $output->FormSelectMultiple('category', $select);
343 $output->FormSubmit();
344 return $output->GetOutput();
347 //return postcalendar_user_submit2($args);
350 function postcalendar_user_submit($args)
352 // We need at least ADD permission to submit an event
353 if (!(bool)PC_ACCESS_ADD) {
354 return _POSTCALENDARNOAUTH;
357 $output = new pnHTML();
358 $output->SetInputMode(_PNH_VERBATIMINPUT);
361 // get the theme globals :: is there a better way to do this?
362 pnThemeLoad(pnUserGetTheme());
363 global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $textcolor1, $textcolor2;
365 // $category = pnVarCleanFromInput('event_category');
366 $category = pnVarCleanFromInput('category');
368 if (!empty($category)) {
369 $category = unserialize(base64_decode($category));
370 //print_r($category);
371 } else { //print_r($_POST);
372 $cat = $_POST['category'];
374 $category = unserialize(base64_decode($cat));
375 //print_r($category);
378 //print_r($category);
380 // echo("<!-- Here is the argument array: -->\n");
381 // foreach ($args as $tmpkey => $tmpval) { // debugging
382 // echo("<!-- $tmpkey => '$tmpval' -->\n");
383 // }
385 extract($args);
387 $Date =& postcalendar_getDate();
388 $year = substr($Date, 0, 4);
389 $month = substr($Date, 4, 2);
390 $day = substr($Date, 6, 2);
392 // basic event information
393 $event_desc = pnVarCleanFromInput('event_desc');
394 $event_category = pnVarCleanFromInput('event_category');
395 $event_subject = pnVarCleanFromInput('event_subject');
396 $event_sharing = pnVarCleanFromInput('event_sharing');
397 $event_topic = pnVarCleanFromInput('event_topic');
399 //id of the user the event is for
400 $event_userid = pnVarCleanFromInput('event_userid');
401 if (!is_numeric($event_userid)) {
402 $event_userid = 0;
405 $event_pid = pnVarCleanFromInput('event_pid');
407 if (!is_numeric($event_pid)) {
408 $event_pid = "";
411 // event start information
412 $event_startmonth = pnVarCleanFromInput('event_startmonth');
413 $event_startday = pnVarCleanFromInput('event_startday');
414 $event_startyear = pnVarCleanFromInput('event_startyear');
415 $event_starttimeh = pnVarCleanFromInput('event_starttimeh');
416 $event_starttimem = pnVarCleanFromInput('event_starttimem');
417 $event_startampm = pnVarCleanFromInput('event_startampm');
419 // location data
420 $event_location = pnVarCleanFromInput('event_location');
421 $event_street1 = pnVarCleanFromInput('event_street1');
422 $event_street2 = pnVarCleanFromInput('event_street2');
423 $event_city = pnVarCleanFromInput('event_city');
424 $event_state = pnVarCleanFromInput('event_state');
425 $event_postal = pnVarCleanFromInput('event_postal');
426 $event_location_info = serialize(compact(
427 'event_location',
428 'event_street1',
429 'event_street2',
430 'event_city',
431 'event_state',
432 'event_postal'
434 // contact data
435 $event_contname = pnVarCleanFromInput('event_contname');
436 $event_conttel = pnVarCleanFromInput('event_conttel');
437 $event_contemail = pnVarCleanFromInput('event_contemail');
438 $event_website = pnVarCleanFromInput('event_website');
439 $event_fee = pnVarCleanFromInput('event_fee');
440 $event_patient_name = pnVarCleanFromInput('patient_name');
442 // event repeating data
443 if (is_array($category)) {
444 //$event_subject =
445 $event_desc = $category['desc'];
446 $event_category = $category['id'];
448 $event_duration = $category['event_duration']; //seconds of the event
449 $event_dur_hours = $event_duration/(60 * 60); //seconds divided by 60 seconds * 60 minutes
450 $event_dur_minutes = ($event_duration%(60 * 60))/60;
451 $event_repeat = $category['event_repeat'];
452 $event_repeat_freq = $category['event_repeat_freq'];
453 $event_repeat_freq_type = $category['event_repeat_freq_type'];
454 $event_repeat_on_num = $category['event_repeat_on_num'];
455 $event_repeat_on_day = $category['event_repeat_on_day'];
456 $event_repeat_on_freq = $category['event_repeat_on_freq'];
457 $event_recurrspec = serialize(compact(
458 'event_repeat_freq',
459 'event_repeat_freq_type',
460 'event_repeat_on_num',
461 'event_repeat_on_day',
462 'event_repeat_on_freq'
465 // event end information
466 $multiple = $category['end_date_freq']." ";
467 switch ($category['end_date_type']) {
468 case REPEAT_EVERY_DAY:
469 case REPEAT_EVERY_WORK_DAY: //end date is in days
470 $multiple .= "days";
471 break;
472 case REPEAT_EVERY_WEEK: //semicolon was here, assumed bug and replaced with colon. end date is in weeks
473 $multiple .= "weeks";
474 break;
475 case REPEAT_EVERY_MONTH: //end date is in months
476 $multiple .= "months";
477 break;
478 case REPEAT_EVERY_YEAR: //end date is in years
479 $multiple .= "years";
480 break;
483 $edate = strtotime(pnVarCleanFromInput('Date'));
484 $event_startmonth = date("m", $edate);
485 $event_startday = date("d", $edate);
486 $event_startyear = date("Y", $edate);
487 $event_enddate = strtotime(pnVarCleanFromInput('Date')." + ".$multiple);
488 $event_endmonth = date("m", $event_enddate);
489 $event_endday = date("d", $event_enddate);
490 $event_endyear = date("Y", $event_enddate);
491 $event_endtype = $category['end_date_flag'];
493 // I'm pretty sure this was a bug since 'event_all_day' appears nowhere
494 // else in the code, but it's hard to tell WTF is going on.
495 // $event_allday = $category['event_all_day'];
496 $event_allday = $category['all_day'];
497 } else {
498 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
499 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
500 $event_duration = (60*60*$event_dur_hours) + (60*$event_dur_minutes);
501 $event_repeat = pnVarCleanFromInput('event_repeat');
502 $event_repeat_freq = pnVarCleanFromInput('event_repeat_freq');
503 $event_repeat_freq_type = pnVarCleanFromInput('event_repeat_freq_type');
504 $event_repeat_on_num = pnVarCleanFromInput('event_repeat_on_num');
505 $event_repeat_on_day = pnVarCleanFromInput('event_repeat_on_day');
506 $event_repeat_on_freq = pnVarCleanFromInput('event_repeat_on_freq');
507 $event_recurrspec = serialize(compact(
508 'event_repeat_freq',
509 'event_repeat_freq_type',
510 'event_repeat_on_num',
511 'event_repeat_on_day',
512 'event_repeat_on_freq'
515 // event end information
516 $event_endmonth = pnVarCleanFromInput('event_endmonth');
517 $event_endday = pnVarCleanFromInput('event_endday');
518 $event_endyear = pnVarCleanFromInput('event_endyear');
519 $event_endtype = pnVarCleanFromInput('event_endtype');
520 $event_allday = pnVarCleanFromInput('event_allday');
523 // Added by Rod:
524 if ($event_allday) {
525 $event_starttimeh = 0;
526 $event_starttimem = 0;
527 $event_startampm = 1;
528 $event_dur_hours = 24;
529 $event_dur_minutes = 0;
530 $event_duration = 60 * 60 * $event_dur_hours;
533 $form_action = pnVarCleanFromInput('form_action');
534 $pc_html_or_text = pnVarCleanFromInput('pc_html_or_text');
535 $pc_event_id = pnVarCleanFromInput('pc_event_id');
536 $data_loaded = pnVarCleanFromInput('data_loaded');
537 $is_update = pnVarCleanFromInput('is_update');
538 $authid = pnVarCleanFromInput('authid');
540 //pennfirm uname matchup future fix
541 //if(pnUserLoggedIn()) { $uname = pnUserGetVar('uname'); }
542 //else { $uname = pnConfigGetVar('anonymous'); }
543 $uname = $_SESSION['authUser'];
544 if (!isset($event_repeat)) {
545 $event_repeat = 0;
548 if (!isset($pc_event_id) || empty($pc_event_id) || $data_loaded) {
549 // lets wrap all the data into array for passing to submit and preview functions
550 $eventdata = compact(
551 'event_subject',
552 'event_desc',
553 'event_sharing',
554 'event_category',
555 'event_topic',
556 'event_startmonth',
557 'event_startday',
558 'event_startyear',
559 'event_starttimeh',
560 'event_starttimem',
561 'event_startampm',
562 'event_endmonth',
563 'event_endday',
564 'event_endyear',
565 'event_endtype',
566 'event_dur_hours',
567 'event_dur_minutes',
568 'event_duration',
569 'event_allday',
570 'event_location',
571 'event_street1',
572 'event_street2',
573 'event_city',
574 'event_state',
575 'event_postal',
576 'event_location_info',
577 'event_contname',
578 'event_conttel',
579 'event_contemail',
580 'event_website',
581 'event_fee',
582 'event_repeat',
583 'event_repeat_freq',
584 'event_repeat_freq_type',
585 'event_repeat_on_num',
586 'event_repeat_on_day',
587 'event_repeat_on_freq',
588 'event_recurrspec',
589 'uname',
590 "event_userid",
591 "event_pid",
592 'Date',
593 'year',
594 'month',
595 'day',
596 'pc_html_or_text',
597 'event_patient_name',
598 'event_pid'
600 $eventdata['is_update'] = $is_update;
601 $eventdata['pc_event_id'] = $pc_event_id;
602 $eventdata['data_loaded'] = true;
603 $eventdata['category'] = base64_encode(serialize($category));
604 } else {
605 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
607 //echo "uname is:$uname other name is: ".$event['uname'] . "<br />";
608 if ($uname != $event['uname']) {
609 if (!validateGroupStatus($uname, getUsername($event['uname']))) {
610 return _PC_CAN_NOT_EDIT;
614 $eventdata['event_subject'] = $event['title'];
615 $eventdata['event_desc'] = $event['hometext'];
616 $eventdata['event_sharing'] = $event['sharing'];
617 $eventdata['event_category'] = $event['catid'];
618 $eventdata['event_topic'] = $event['topic'];
619 $eventdata['event_startmonth'] = substr($event['eventDate'], 5, 2);
620 $eventdata['event_startday'] = substr($event['eventDate'], 8, 2);
621 $eventdata['event_startyear'] = substr($event['eventDate'], 0, 4);
622 $eventdata['event_starttimeh'] = substr($event['startTime'], 0, 2);
623 $eventdata['event_starttimem'] = substr($event['startTime'], 3, 2);
624 $eventdata['event_startampm'] = $eventdata['event_starttimeh'] < 12 ? 1 : 2 ; //1 is am , 2 is pm
625 $eventdata['event_endmonth'] = substr($event['endDate'], 5, 2);
626 $eventdata['event_endday'] = substr($event['endDate'], 8, 2);
627 $eventdata['event_endyear'] = substr($event['endDate'], 0, 4);
628 $eventdata['event_endtype'] = $event['endDate'] == '0000-00-00' ? '0' : '1' ;
629 $eventdata['event_dur_hours'] = $event['duration_hours'];
630 $eventdata['event_dur_minutes'] = $event['duration_minutes'];
631 $eventdata['event_duration'] = $event['duration'];
632 $eventdata['event_allday'] = $event['alldayevent'];
633 $loc_data = unserialize($event['location']);
634 $eventdata['event_location'] = $loc_data['event_location'];
635 $eventdata['event_street1'] = $loc_data['event_street1'];
636 $eventdata['event_street2'] = $loc_data['event_street2'];
637 $eventdata['event_city'] = $loc_data['event_city'];
638 $eventdata['event_state'] = $loc_data['event_state'];
639 $eventdata['event_postal'] = $loc_data['event_postal'];
640 $eventdata['event_location_info'] = $loc_data;
641 $eventdata['event_contname'] = $event['contname'];
642 $eventdata['event_conttel'] = $event['conttel'];
643 $eventdata['event_contemail'] = $event['contemail'];
644 $eventdata['event_website'] = $event['website'];
645 $eventdata['event_fee'] = $event['fee'];
646 $eventdata['event_repeat'] = $event['recurrtype'];
647 $rspecs = unserialize($event['recurrspec']);
648 $eventdata['event_repeat_freq'] = $rspecs['event_repeat_freq'];
649 $eventdata['event_repeat_freq_type'] = $rspecs['event_repeat_freq_type'];
650 $eventdata['event_repeat_on_num'] = $rspecs['event_repeat_on_num'];
651 $eventdata['event_repeat_on_day'] = $rspecs['event_repeat_on_day'];
652 $eventdata['event_repeat_on_freq'] = $rspecs['event_repeat_on_freq'];
653 $eventdata['event_recurrspec'] = $rspecs;
654 $eventdata['uname'] = $uname;
655 $eventdata['event_userid'] = $event['event_userid'];
656 $eventdata['event_pid'] = $event['pid'];
657 $eventdata['event_aid'] = $event['aid'];
658 $eventdata['Date'] = $Date;
659 $eventdata['year'] = $year;
660 $eventdata['month'] = $month;
661 $eventdata['day'] = $day;
662 $eventdata['is_update'] = true;
663 $eventdata['pc_event_id'] = $pc_event_id;
664 $event_data['patient_name'] = $event_patient_name;
665 $eventdata['data_loaded'] = true;
666 $eventdata['pc_html_or_text'] = $pc_html_or_text;
667 $eventdata['category'] = base64_encode(serialize($category));
670 // lets get the module's information
671 $modinfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__));
672 $categories = pnModAPIFunc(__POSTCALENDAR__, 'user', 'getCategories');
673 $output->tabindex=1;
675 //================================================================
676 // ERROR CHECKING
677 //================================================================
678 // removed event_desc as a required_var
680 $required_vars = array('event_subject');
681 $required_name = array(_PC_EVENT_TITLE,_PC_EVENT_DESC);
682 $error_msg = '';
683 $output->SetOutputMode(_PNH_RETURNOUTPUT);
684 $reqCount = count($required_vars);
685 //print_r($eventdata);
686 for ($r=0; $r<$reqCount; $r++) {
687 if (empty($$required_vars[$r]) || !preg_match('/\S/i', $$required_vars[$r])) {
688 $error_msg .= $output->Text('<b>'.$required_name[$r].'</b> '._PC_SUBMIT_ERROR4);
689 $error_msg .= $output->Linebreak();
693 unset($reqCount);
694 // check repeating frequencies
695 if ($event_repeat == REPEAT) {
696 //can't have a repeating event that doesnt have an end date
697 if ($event_endtype == 0) {
698 $error_msg .= $output->Text("Repeating events must have an end date set.");
699 $error_msg .= $output->Linebreak();
702 if (!isset($event_repeat_freq) || $event_repeat_freq < 1 || empty($event_repeat_freq)) {
703 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
704 $error_msg .= $output->Linebreak();
705 } elseif (!is_numeric($event_repeat_freq)) {
706 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
707 $error_msg .= $output->Linebreak();
709 } elseif ($event_repeat == REPEAT_ON) {
710 //can't have a repeating event that doesnt have an end date
711 if ($event_endtype == 0) {
712 $error_msg .= $output->Text("Repeating events must have an end date set.");
713 $error_msg .= $output->Linebreak();
716 if (!isset($event_repeat_on_freq) || $event_repeat_on_freq < 1 || empty($event_repeat_on_freq)) {
717 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
718 $error_msg .= $output->Linebreak();
719 } elseif (!is_numeric($event_repeat_on_freq)) {
720 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
721 $error_msg .= $output->Linebreak();
725 // check date validity
726 if (_SETTING_TIME_24HOUR) {
727 $startTime = $event_starttimeh.':'.$event_starttimem;
728 $endTime = $event_endtimeh.':'.$event_endtimem;
729 } else {
730 if ($event_startampm == _AM_VAL) {
731 $event_starttimeh = $event_starttimeh == 12 ? '00' : $event_starttimeh;
732 } else {
733 $event_starttimeh = $event_starttimeh != 12 ? $event_starttimeh+=12 : $event_starttimeh;
736 $startTime = $event_starttimeh.':'.$event_starttimem;
739 $sdate = strtotime($event_startyear.'-'.$event_startmonth.'-'.$event_startday);
740 $edate = strtotime($event_endyear.'-'.$event_endmonth.'-'.$event_endday);
741 $tdate = strtotime(date('Y-m-d'));
742 if ($edate < $sdate && $event_endtype == 1) {
743 $error_msg .= $output->Text(_PC_SUBMIT_ERROR1);
744 $error_msg .= $output->Linebreak();
747 if (!checkdate($event_startmonth, $event_startday, $event_startyear)) {
748 $error_msg .= $output->Text(_PC_SUBMIT_ERROR2 . " '$event_startyear-$event_startmonth-$event_startday'");
749 $error_msg .= $output->Linebreak();
752 if (!checkdate($event_endmonth, $event_endday, $event_endyear)) {
753 $error_msg .= $output->Text(_PC_SUBMIT_ERROR3 . " '$event_endyear-$event_endmonth-$event_endday'");
754 $error_msg .= $output->Linebreak();
757 //check limit on category
758 if (($ret = checkCategoryLimits($eventdata)) != null) {
759 $error_msg .= $output->Text("This category has a limit of $ret[limit] between $ret[start] and $ret[end] which you have exceeded.");
760 $error_msg .= $output->Linebreak();
761 //$output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
762 //return $output->GetOutput();
765 //echo "fa: " . $form_action . " double_book: " . pnVarCleanFromInput("double_book") . " update: " . $eventdata['is_update'] . " em: " . $error_msg;
766 //event collision check
768 if ($form_action == "commit" && pnVarCleanFromInput("double_book") != 1 && !$eventdata['is_update'] && empty($error_msg)) {
769 //check on new shceduling events(in or out of office) to make sure that
770 //you don't have more than one set per day
771 //event category 1 is in office, event category 2 is out of office
773 if ($eventdata['event_category'] == 2 || $eventdata['event_category'] == 3) {
774 $searchargs = array();
775 $searchargs['start'] = $eventdata['event_startmonth'] . "/" . $eventdata['event_startday'] ."/". $eventdata['event_startyear'];
776 $searchargs['end'] = $eventdata['event_endmonth'] . "/" . $eventdata['event_endday'] ."/". $eventdata['event_endyear'];
777 $searchargs['provider_id'] = $eventdata['event_userid'];
779 //faFLag uses pcgeteventsfa, which can search on provider
780 $searchargs['faFlag'] = true;
781 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) ";
782 //print_r($searchargs);
784 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
785 $ekey = md5($event_data['subject'] . date("U") . rand(0, 1000));
786 $oldstatus = $eventdata['event_status'];
787 $oldtitle = $eventdata['event_subject'];
788 $old_patient_name = $eventdata['patient_name'];
789 $old_dur_hours = $eventdata['event_dur_hours'];
790 $old_dur_min = $eventdata['event_dur_minutes'];
791 $old_duration = $eventdata['event_duration'];
792 $eventdata['event_subject'] = add_escape_custom($ekey);
793 $eventdata['event_status'] = _EVENT_TEMPORARY;
795 if (!pnModAPIFunc(__POSTCALENDAR__, 'user', 'submitEvent', $eventdata)) {
796 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
797 $error_msg .= $output->Text("<b>The system was unable to check you event for conflicts with other events because there was a problem with your database.</b><br />");
798 $error_msg .= $output->Text('</div></center>');
799 $error_msg .= $output->Linebreak();
800 $error_msg .= $output->Text($dbconn->ErrorMsg());
803 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) AND a.pc_title = '" . $eventdata['event_subject'] . "' ";
804 $searchargs['event_status'] = _EVENT_TEMPORARY;
805 $submitEventByDate =& postcalendar_userapi_pcGetEvents($searchargs);
807 if (!delete_event($ekey)) {
808 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
809 $error_msg .= $output->Text("<b>The system was unable to delete a temporary record it created, this may have left the database in an inconsistent state.</b><br />");
810 $error_msg .= $output->Text('</div></center>');
811 $error_msg .= $output->Linebreak();
812 $error_msg .= $output->Text($dbconn->ErrorMsg());
815 $eventdata['event_status'] = $oldstatus;
816 $eventdata['event_subject'] = $oldtitle;
817 $eventdata['patient_name '] = $old_patient_name;
818 $eventdata['event_dur_hours'] = $old_dur_hour;
819 $eventdata['event_dur_minutes'] = $old_dur_min;
821 foreach ($submitEventByDate as $date => $newevent) {
822 if (count($eventsByDate[$date]) > 0 && count($newevent) > 0) {
823 foreach ($eventsByDate[$date] as $con_event) {
824 if ($con_event['catid'] == $newevent[0]['catid']) {
825 $error_msg .= $output->Text('There is a conflict on ' . $date . ' with event ' . $con_event['title']);
826 $error_msg .= $output->Linebreak();
832 /*echo "<br /><br />";
833 print_r($eventsByDate);
834 echo "<br /><br />";
835 print_r($submitEventByDate);*/
838 $colls = checkEventCollision($eventdata);
839 if (count($colls) > 0) {
840 foreach ($colls as $coll) {
841 $error_msg .= $output->Text("Event Collides with: " . $coll['title'] . " at " . date("g:i a", strtotime($coll['startTime'])) . "<br />");
842 $error_msg .= $output->Linebreak();
845 $error_msg .= $output->Text("Submit again to \"Double Book\" <br />To change values click back in your browser.");
846 $error_msg .= $output->Linebreak();
847 // the following line will display "DOUBLE BOOKED" if when adding an event there is a collistion with anothe appointment
848 //$eventdata['event_subject'] = "DOUBLE BOOKED " . $eventdata['event_subject'];
849 $eventdata['double_book'] = 1;
853 $output->SetOutputMode(_PNH_KEEPOUTPUT);
854 if ($form_action == 'preview') {
855 //================================================================
856 // Preview the event
857 //================================================================
858 // check authid
859 if (!pnSecConfirmAuthKey()) {
860 return(_NO_DIRECT_ACCESS);
863 if (!empty($error_msg)) {
864 $preview = false;
865 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
866 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
867 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
868 $output->Linebreak();
869 $output->Text($error_msg);
870 $output->Text('</td></td></table>');
871 $output->Text('</td></td></table>');
872 $output->Linebreak(2);
873 } else {
874 $output->Text(pnModAPIFunc(__POSTCALENDAR__, 'user', 'eventPreview', $eventdata));
875 $output->Linebreak();
877 } elseif ($form_action == 'commit') {
878 //================================================================
879 // Enter the event into the DB
880 //================================================================
881 if (!empty($error_msg)) {
882 if (!pnSecConfirmAuthKey(true)) {
883 return(_NO_DIRECT_ACCESS);
885 } else {
886 if (!pnSecConfirmAuthKey()) {
887 return(_NO_DIRECT_ACCESS);
891 if (!empty($error_msg)) {
892 $preview = false;
893 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
894 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
895 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
896 $output->Linebreak();
897 $output->Text($error_msg);
898 $output->Text('</td></td></table>');
899 $output->Text('</td></td></table>');
900 $output->Linebreak(2);
901 } else {
902 if (!pnModAPIFunc(__POSTCALENDAR__, 'user', 'submitEvent', $eventdata)) {
903 $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
904 $output->Text("<b>"._PC_EVENT_SUBMISSION_FAILED."</b>");
905 $output->Text('</div></center>');
906 $output->Linebreak();
907 $output->Text($dbconn->ErrorMsg());
908 } else {
909 // clear the Smarty cache
910 $tpl = new pcSmarty();
911 $tpl->clear_all_cache();
912 $output->Text('<center><div style="padding:5px; border:1px solid green; background-color: lightgreen;">');
913 if ($is_update) {
914 $output->Text("<b>"._PC_EVENT_EDIT_SUCCESS."</b>");
915 } else {
916 $output->Text("<b>"._PC_EVENT_SUBMISSION_SUCCESS."</b>");
919 $output->Text('</div></center>');
920 $output->Linebreak();
921 // clear the form vars
922 $event_subject=$event_desc=$event_sharing=$event_category=$event_topic=
923 $event_startmonth=$event_startday=$event_startyear=$event_starttimeh=$event_starttimem=$event_startampm=
924 $event_endmonth=$event_endday=$event_endyear=$event_endtype=$event_dur_hours=$event_dur_minutes=
925 $event_duration=$event_allday=$event_location=$event_street1=$event_street2=$event_city=$event_state=
926 $event_postal=$event_location_info=$event_contname=$event_conttel=$event_contemail=
927 $event_website=$event_fee=$event_repeat=$event_repeat_freq=$event_repeat_freq_type=
928 $event_repeat_on_num=$event_repeat_on_day=$event_repeat_on_freq=$event_recurrspec=$uname=
929 $Date=$year=$month=$day=$pc_html_or_text=$event_patient_name=$evnet_pid=null;
930 $is_update = false;
931 $pc_event_id = 0;
933 //$_SESSION['category'] = "";
934 // lets wrap all the data into array for passing to submit and preview functions
935 $eventdata = compact(
936 'event_subject',
937 'event_desc',
938 'event_sharing',
939 'event_category',
940 'event_topic',
941 'event_startmonth',
942 'event_startday',
943 'event_startyear',
944 'event_starttimeh',
945 'event_starttimem',
946 'event_startampm',
947 'event_endmonth',
948 'event_endday',
949 'event_endyear',
950 'event_endtype',
951 'event_dur_hours',
952 'event_dur_minutes',
953 'event_duration',
954 'event_allday',
955 'event_location',
956 'event_street1',
957 'event_street2',
958 'event_city',
959 'event_state',
960 'event_postal',
961 'event_location_info',
962 'event_contname',
963 'event_conttel',
964 'event_contemail',
965 'event_website',
966 'event_fee',
967 'event_repeat',
968 'event_repeat_freq',
969 'event_repeat_freq_type',
970 'event_repeat_on_num',
971 'event_repeat_on_day',
972 'event_repeat_on_freq',
973 'event_recurrspec',
974 'uname',
975 'Date',
976 'year',
977 'month',
978 'day',
979 'pc_html_or_text',
980 'is_update',
981 'pc_event_id',
982 'event_patient_name'
984 //if no using the no_nav format then show form again after submit
985 if (pnVarCleanFromInput("no_nav") == 1) {
986 return $output->GetOutput();
992 $output->Text(pnModAPIFunc('PostCalendar', 'user', 'buildSubmitForm', $eventdata));
993 return $output->GetOutput();
998 * search events
1000 function postcalendar_user_search()
1002 if (!(bool)PC_ACCESS_OVERVIEW) {
1003 return _POSTCALENDARNOAUTH;
1006 $tpl = new pcSmarty();
1007 $k = formData("pc_keywords", "R"); //from library/formdata.inc.php
1008 $k_andor = pnVarCleanFromInput('pc_keywords_andor');
1009 $pc_category = pnVarCleanFromInput('pc_category');
1010 $pc_facility = pnVarCleanFromInput('pc_facility');
1011 $pc_topic = pnVarCleanFromInput('pc_topic');
1012 $submit = pnVarCleanFromInput('submit');
1013 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
1014 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
1015 $start = pnVarCleanFromInput('start');
1016 $end = pnVarCleanFromInput('end');
1018 // get list of categories for the user to choose from
1019 $categories = postcalendar_userapi_getCategories();
1020 $cat_options = '';
1021 foreach ($categories as $category) {
1022 $selected = "";
1023 if ($pc_category == $category[id]) {
1024 $selected = " SELECTED ";
1027 //modified 8/09 by BM to allow translation if applicable
1028 $cat_options .= "<option value=\"$category[id]\" $selected>" . xl_appt_category($category[name]) . "</option>";
1031 $tpl->assign_by_ref('CATEGORY_OPTIONS', $cat_options);
1033 $tpl->assign('event_dur_hours', $event_dur_hours);
1034 $tpl->assign('event_dur_minutes', $event_dur_minutes);
1036 // create default start and end dates for the search form
1037 if (isset($start) && $start != "") {
1038 $tpl->assign('DATE_START', $start);
1039 } else {
1040 $tpl->assign('DATE_START', date("m/d/Y"));
1043 if (isset($end) && $end!= "") {
1044 $tpl->assign('DATE_END', $end);
1045 } else {
1046 $tpl->assign('DATE_END', date("m/d/Y", strtotime("+7 Days", time())));
1049 // then override the setting if we have a value from the submitted form
1050 $ProviderID = pnVarCleanFromInput("provider_id");
1051 if (is_numeric($ProviderID)) {
1052 $tpl->assign('ProviderID', $ProviderID);
1053 } elseif ($ProviderID == "_ALL_") {
1054 // do nothing
1055 } else {
1056 $tpl->assign('ProviderID', "");
1059 $provinfo = getProviderInfo();
1060 $tpl->assign('providers', $provinfo);
1061 // build a list of provider-options for the select box on the input form -- JRM
1062 $provider_options = "<option value='_ALL_' ";
1063 if ($ProviderID == "_ALL_") {
1064 $provider_options .= " SELECTED ";
1067 $provider_options .= ">" . xl('All Providers') . "</option>";
1068 foreach ($provinfo as $provider) {
1069 $selected = "";
1070 // if we don't have a ProviderID chosen, pick the first one from the
1071 // pc_username Session variable
1072 if ($ProviderID == "") {
1073 // that variable stores the 'username' and not the numeric 'id'
1074 if ($_SESSION['pc_username'][0] == $provider['username']) {
1075 $selected = " SELECTED ";
1077 } else if ($ProviderID == $provider['id']) {
1078 $selected = " SELECTED ";
1081 $provider_options .= "<option value=\"".$provider['id']."\" ".$selected.">";
1082 $provider_options .= $provider['lname'].", ".$provider['fname']."</option>";
1085 $tpl->assign_by_ref('PROVIDER_OPTIONS', $provider_options);
1087 // build a list of facility options for the select box on the input form -- JRM
1088 $facilities = getFacilities();
1089 $fac_options = "<option value=''>" . xl('All Facilities') . "</option>";
1090 foreach ($facilities as $facility) {
1091 $selected = "";
1092 if ($facility['id'] == $pc_facility) {
1093 $selected = " SELECTED ";
1096 $fac_options .= "<option value=\"".$facility['id']."\" ".$selected.">";
1097 $fac_options .= $facility['name']."</option>";
1100 $tpl->assign_by_ref('FACILITY_OPTIONS', $fac_options);
1102 $PatientID = pnVarCleanFromInput("patient_id");
1103 // limit the number of results returned by getPatientPID
1104 // this helps to prevent the server from stalling on a request with
1105 // no PID and thousands of PIDs in the database -- JRM
1106 // the function getPatientPID($pid, $given, $orderby, $limit, $start) <-- defined in library/patient.inc
1107 $plistlimit = 500;
1108 if (is_numeric($PatientID)) {
1109 $tpl->assign('PatientList', getPatientPID(array('pid'=>$PatientID, 'limit'=>$plistlimit)));
1110 } else {
1111 $tpl->assign('PatientList', getPatientPID(array('limit' =>$plistlimit)));
1114 $event_endday = pnVarCleanFromInput("event_endday");
1115 $event_endmonth = pnVarCleanFromInput("event_endmonth");
1116 $event_endyear = pnVarCleanFromInput("event_endyear");
1118 $event_startday = pnVarCleanFromInput("event_startday");
1119 $event_startmonth = pnVarCleanFromInput("event_startmonth");
1120 $event_startyear = pnVarCleanFromInput("event_startyear");
1121 if ($event_startday > $event_endday) {
1122 $event_endday = $event_startday;
1125 if ($event_startmonth > $event_endmonth) {
1126 $event_endmonth = $event_startmonth;
1129 if ($event_startyear > $event_endyear) {
1130 $event_endyear = $event_startyear;
1133 $tpl->assign('patient_id', $PatientID);
1134 $tpl->assign('provider_id', $ProviderID);
1135 $tpl->assign("event_category", pnVarCleanFromInput("event_category"));
1136 $tpl->assign("event_subject", pnVarCleanFromInput("event_subject"));
1137 $output = new pnHTML();
1138 $output->SetOutputMode(_PNH_RETURNOUTPUT);
1139 if (_SETTING_USE_INT_DATES) {
1140 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildDaySelect', array('pc_day'=>$day,'selected'=>$event_startday));
1141 $formdata = $output->FormSelectMultiple('event_startday', $sel_data);
1142 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildMonthSelect', array('pc_month'=>$month,'selected'=>$event_startmonth));
1143 $formdata .= $output->FormSelectMultiple('event_startmonth', $sel_data);
1144 } else {
1145 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildMonthSelect', array('pc_month'=>$month,'selected'=>$event_startmonth));
1146 $formdata = $output->FormSelectMultiple('event_startmonth', $sel_data);
1147 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildDaySelect', array('pc_day'=>$day,'selected'=>$event_startday));
1148 $formdata .= $output->FormSelectMultiple('event_startday', $sel_data);
1151 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildYearSelect', array('pc_year'=>$year,'selected'=>$event_startyear));
1152 $formdata .= $output->FormSelectMultiple('event_startyear', $sel_data);
1153 $output->SetOutputMode(_PNH_KEEPOUTPUT);
1154 $tpl->assign('SelectDateTimeStart', $formdata);
1155 $output->SetOutputMode(_PNH_RETURNOUTPUT);
1156 if (_SETTING_USE_INT_DATES) {
1157 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildDaySelect', array('pc_day'=>$day,'selected'=>$event_endday));
1158 $formdata = $output->FormSelectMultiple('event_endday', $sel_data);
1159 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildMonthSelect', array('pc_month'=>$month,'selected'=>$event_endmonth));
1160 $formdata .= $output->FormSelectMultiple('event_endmonth', $sel_data);
1161 } else {
1162 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildMonthSelect', array('pc_month'=>$month,'selected'=>$event_endmonth));
1163 $formdata = $output->FormSelectMultiple('event_endmonth', $sel_data);
1164 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildDaySelect', array('pc_day'=>$day,'selected'=>$event_endday ));
1165 $formdata .= $output->FormSelectMultiple('event_endday', $sel_data);
1168 $sel_data = pnModAPIFunc(__POSTCALENDAR__, 'user', 'buildYearSelect', array('pc_year'=>$year,'selected'=>$event_endyear));
1169 $formdata .= $output->FormSelectMultiple('event_endyear', $sel_data);
1170 $output->SetOutputMode(_PNH_KEEPOUTPUT);
1171 $tpl->assign('SelectDateTimeEnd', $formdata);
1172 $output = null;
1173 if (_SETTING_DISPLAY_TOPICS) {
1174 $topics = postcalendar_userapi_getTopics();
1175 $top_options = '';
1176 foreach ($topics as $topic) {
1177 $top_options .= "<option value=\"$topic[id]\">$topic[text]</option>";
1180 $tpl->assign_by_ref('TOPIC_OPTIONS', $top_options);
1183 //=================================================================
1184 // Find out what Template we're using
1185 //=================================================================
1186 $template_name = _SETTING_TEMPLATE;
1187 if (!isset($template_name)) {
1188 $template_name = 'default';
1191 //=================================================================
1192 // Output the search form
1193 //=================================================================
1194 $tpl->assign('FORM_ACTION', pnModURL(__POSTCALENDAR__, 'user', 'search'));
1195 //=================================================================
1196 // Perform the search if we have data
1197 //=================================================================
1198 if (!empty($submit) && strtolower($submit) == "find first") {
1199 // not sure how we get here...
1200 $searchargs = array();
1201 $searchargs['start'] = pnVarCleanFromInput("event_startmonth") . "/" . pnVarCleanFromInput("event_startday") ."/". pnVarCleanFromInput("event_startyear");
1202 $searchargs['end'] = pnVarCleanFromInput("event_endmonth") . "/" . pnVarCleanFromInput("event_endday") ."/". pnVarCleanFromInput("event_endyear");
1203 $searchargs['provider_id'] = pnVarCleanFromInput("provider_id");
1204 $searchargs['faFlag'] = true;
1205 //print_r($searchargs);
1206 //echo "<br />";
1207 //set defaults to current week if empty
1208 if ($searchargs['start'] == "//") {
1209 $searchargs['start'] = date("m/d/Y");
1212 if ($searchargs['end'] == "//") {
1213 $searchargs['end'] = date("m/d/Y", strtotime("+7 Days", strtotime($searchargs['start'])));
1216 //print_r($searchargs);
1217 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1218 //print_r($eventsByDate);
1219 $found = findFirstAvailable($eventsByDate);
1220 $tpl->assign('available_times', $found);
1221 //print_r($_POST);
1223 $tpl->assign('SEARCH_PERFORMED', true);
1224 $tpl->assign('A_EVENTS', $eventsByDate);
1227 if (!empty($submit) && strtolower($submit) == "listapps") {
1228 // not sure how we get here...
1229 $searchargs = array();
1230 $searchargs['start'] = date("m/d/Y");
1231 $searchargs['end'] = date("m/d/Y", strtotime("+1 year", strtotime($searchargs['start'])));
1232 $searchargs['patient_id'] = pnVarCleanFromInput("patient_id");
1233 $searchargs['listappsFlag'] = true;
1235 $sqlKeywords .= "(a.pc_pid = '" . pnVarCleanFromInput("patient_id") . "' )";
1237 $searchargs['s_keywords'] = $sqlKeywords;
1238 //print_r($searchargs);
1239 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1240 //print_r($eventsByDate);
1241 $tpl->assign('appointments', $eventsByDate);
1242 //print_r($_POST);
1244 $tpl->assign('SEARCH_PERFORMED', true);
1245 $tpl->assign('A_EVENTS', $eventsByDate);
1246 } elseif (!empty($submit)) {
1247 // we get here by searching via the PostCalendar search
1248 $sqlKeywords = '';
1249 $keywords = explode(' ', $k);
1250 // build our search query
1251 foreach ($keywords as $word) {
1252 if (!empty($sqlKeywords)) {
1253 $sqlKeywords .= " $k_andor ";
1256 $sqlKeywords .= '(';
1257 $sqlKeywords .= "pd.lname LIKE '%$word%' OR ";
1258 $sqlKeywords .= "pd.fname LIKE '%$word%' OR ";
1259 $sqlKeywords .= "u.lname LIKE '%$word%' OR ";
1260 $sqlKeywords .= "u.fname LIKE '%$word%' OR ";
1261 $sqlKeywords .= "a.pc_title LIKE '%$word%' OR ";
1262 $sqlKeywords .= "a.pc_hometext LIKE '%$word%' OR ";
1263 $sqlKeywords .= "a.pc_location LIKE '%$word%'";
1264 $sqlKeywords .= ') ';
1268 if (!empty($pc_category)) {
1269 $s_category = "a.pc_catid = '$pc_category'";
1272 if (!empty($pc_topic)) {
1273 $s_topic = "a.pc_topic = '$pc_topic'";
1276 $searchargs = array();
1277 if (!empty($sqlKeywords)) {
1278 $searchargs['s_keywords'] = $sqlKeywords;
1281 if (!empty($s_category)) {
1282 $searchargs['s_category'] = $s_category;
1285 if (!empty($s_topic)) {
1286 $searchargs['s_topic'] = $s_topic;
1289 // some new search parameters introduced in the ajax_search form... JRM March 2008
1291 // the ajax_search form has form parameters for 'start' and 'end' already built in
1292 // so use them if available
1293 $tmpDate = pnVarCleanFromInput("start");
1294 if (isset($tmpDate) && $tmpDate != "") {
1295 $searchargs['start'] = pnVarCleanFromInput("start");
1296 } else {
1297 $searchargs['start'] = "//";
1300 $tmpDate = pnVarCleanFromInput("end");
1301 if (isset($tmpDate) && $tmpDate != "") {
1302 $searchargs['end'] = pnVarCleanFromInput("end");
1303 } else {
1304 $searchargs['end'] = "//";
1307 // we can limit our search by provider -- JRM March 2008
1308 if (isset($ProviderID) && $ProviderID != "") { // && $ProviderID != "_ALL_") {
1309 $searchargs['provider_id'] = array();
1310 array_push($searchargs['provider_id'], $ProviderID);
1313 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1315 // we can limit our search by facility -- JRM March 2008
1316 if (isset($pc_facility) && $pc_facility != "") {
1317 $searchargs['pc_facility'] = $pc_facility;
1320 //print_r($eventsByDate);
1321 $tpl->assign('SEARCH_PERFORMED', true);
1322 $tpl->assign('A_EVENTS', $eventsByDate);
1325 $tpl->caching = false;
1326 $tpl->assign('STYLE', $GLOBALS['style']);
1327 $pageSetup =& pnModAPIFunc(__POSTCALENDAR__, 'user', 'pageSetup');
1328 $return = $pageSetup . $tpl->fetch($template_name.'/user/search.html');
1329 return $return;
1332 function checkCategoryLimits($eventdata)
1334 extract($eventdata);
1335 //print_r($eventdata);
1336 //print "$event_starttimeh:$event_starttimem";
1338 $limits = & pnModAPIFunc(__POSTCALENDAR__, 'user', 'getCategoryLimits');
1339 //print_r($limits);
1340 foreach ($limits as $limit) {
1341 if ($limit['catid'] == $event_category) { //have a limit
1342 //print_r($limit);
1343 $sdate = ($event_startmonth.'/'.$event_startday.'/'
1344 .$event_startyear);
1345 $edate = $sdate;
1346 $stime = date("H:i:00", strtotime($limit['startTime']));
1347 $etime = date("H:i:00", strtotime($limit['endTime']));
1348 if ($is_update) {
1349 $searchText = "a.pc_eid != '$pc_event_id' AND ";
1352 //echo "stime is: $stime, etime is: $etime sdate is: $sdate edate is: $edate<br />";
1353 $a = array('s_category' => " a.pc_catid = $event_category",'start'=>$edate,
1354 'end'=>$sdate, 'stime' => $stime, 'etime' => $etime,'providerID'=>$event_userid,
1355 's_keywords'=>$searchText."a.pc_starttime >= '$stime' AND a.pc_endtime <= '$etime'");
1356 $eventsByDate =& postcalendar_userapi_pcGetEvents($a);
1357 //print_r($eventsByDate);
1358 $ret = null;
1359 foreach ($eventsByDate as $day) {
1360 //if event time falls within limit time check
1361 //hour from forms is 12 not 24 format, convert here
1362 if ($event_startampm == 2 && $event_starttimeh != 12) {
1363 $event_starttimeh += 12;
1364 } elseif ($event_startampm == 1 && $event_starttimeh == 12) {
1365 $event_starttimeh -= 12;
1368 $event_starttime = date("H:i:00", strtotime($event_starttimeh.":".$event_starttimem.":"."00"));
1369 $event_endtime = date("H:i:00", strtotime($event_endtimeh.":".$event_endtimem.":"."00"));
1371 if ($event_starttime >= $limit['startTime']) {
1372 $numToday = count($day);
1374 if ($numToday >= $limit['limit']) {
1375 //reached limit
1376 $ret = array("start"=>$limit['startTime'],"end"=>$limit['endTime'],
1377 "limit"=>$limit['limit']);
1378 return $ret;
1380 }//if in limit time span
1385 return null;
1387 /*list($dbconn) = pnDBGetConn();
1388 $pntable = pnDBGetTables();
1389 $event_table = $pntable['postcalendar_events'];
1390 //get all of todays events
1391 $starting_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1392 $ending_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1393 //select all of the limits
1394 $limits = & pnModAPIFunc(__POSTCALENDAR__,'user','getCategoryLimits');
1395 //for each limit for this category id, make sure you won't exceed the limit
1396 foreach($limits as $limit)
1398 if(($key = array_search($eventdata['cat_id'])) != false)
1400 $sql = "SELECT count(pc_eid) from $event_table where "