Syntax fixes - static methods, call by reference and undefined variables
[openemr.git] / interface / main / calendar / modules / PostCalendar / pnuser.php
blobdfaf318ad8d92b26c3d1013b534e35f00cae1976
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.
36 require_once($GLOBALS['srcdir']."/formdata.inc.php");
38 //=========================================================================
39 // start the main postcalendar application
40 //=========================================================================
41 function postcalendar_user_main()
43 // check the authorization
45 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; }
46 // get the date and go to the view function
47 $Date = postcalendar_getDate();
48 return postcalendar_user_view(array('Date'=>$Date));
52 /**
53 * view items
54 * This is a standard function to provide an overview of all of the items
55 * available from the module.
57 function postcalendar_user_view()
59 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; }
60 // get the vars that were passed in
61 list($Date,
62 $print,
63 $viewtype,
64 $jumpday,
65 $jumpmonth,
66 $jumpyear) = pnVarCleanFromInput('Date',
67 'print',
68 'viewtype',
69 'jumpday',
70 'jumpmonth',
71 'jumpyear');
72 $Date =postcalendar_getDate();
73 if(!isset($viewtype)) $viewtype = _SETTING_DEFAULT_VIEW;
75 // added to allow the view & providers to remain as the user last saw it -- JRM
76 if ($_SESSION['viewtype']) $viewtype = $_SESSION['viewtype'];
77 if ($_SESSION['pc_username']) $pc_username = $_SESSION['pc_username'];
79 return postcalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date,'print'=>$print)) . postcalendar_footer();
82 /**
83 * display item
84 * This is a standard function to provide detailed information on a single item
85 * available from the module.
87 function postcalendar_user_display($args)
89 list($eid, $viewtype, $tplview,
90 $pc_username, $Date, $print, $category, $topic, $pc_facility) = pnVarCleanFromInput('eid', 'viewtype', 'tplview',
91 'pc_username', 'Date', 'print', 'pc_category', 'pc_topic', 'pc_facility');
92 // added to allow the view & providers to remain as the user last saw it -- JRM
93 if ($_SESSION['viewtype']) $viewtype = $_SESSION['viewtype'];
94 if ($_SESSION['pc_username']) $pc_username = $_SESSION['pc_username'];
96 // funky things happen if the view is 'details' and we don't have an event ID
97 // so in such a case, we're going to revert to the 'day' view -- JRM
98 if ($viewtype == 'details' && (!isset($eid) || $eid == "")) {
99 $_SESSION['viewtype'] = 'day';
100 $viewtype = $_SESSION['viewtype'];
103 extract($args);
104 if(empty($Date) && empty($viewtype)) { return false; }
105 if(empty($tplview)) $tplview = 'default';
107 $uid = pnUserGetVar('uid');
108 $theme = pnUserGetTheme();
110 //$cacheid = md5($Date.$viewtype.$tplview._SETTING_TEMPLATE.$eid.$print.$uid.'u'.$pc_username.$theme.'c'.$category.'t'.$topic);
111 $cacheid = md5(strtotime("now"));
113 switch ($viewtype)
115 case 'details':
116 if (!(bool)PC_ACCESS_READ) { return _POSTCALENDARNOAUTH; }
117 $event = pnModAPIFunc('PostCalendar','user','eventDetail',array('eid'=>$eid,
118 'Date'=>$Date,
119 'print'=>$print,
120 'cacheid'=>$cacheid));
121 if($event === false) {
122 pnRedirect(pnModURL(__POSTCALENDAR__,'user'));
124 $out = "\n\n<!-- START user_display -->\n\n";
125 $out .= $event;
126 $out .= "\n\n<!-- END user_display -->\n\n";
127 break;
129 default :
130 if (!(bool)PC_ACCESS_OVERVIEW) {
131 return _POSTCALENDARNOAUTH;
133 $out = "\n\n<!-- START user_display -->\n\n";
134 $out .= pnModAPIFunc('PostCalendar','user','buildView',array('Date'=>$Date,
135 'viewtype'=>$viewtype,
136 'cacheid'=>$cacheid));
137 $out .= "\n\n<!-- END user_display -->\n\n";
138 break;
140 // Return the output that has been generated by this function
141 return $out;
143 function postcalendar_user_delete()
145 if(!(bool)PC_ACCESS_ADD) {
146 return _POSTCALENDAR_NOAUTH;
149 $output = new pnHTML();
150 $output->SetInputMode(_PNH_VERBATIMINPUT);
152 $uname = $_SESSION['authUser'];
153 list($action,$pc_event_id) = pnVarCleanFromInput('action','pc_event_id');
154 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
155 if($uname != $event['uname']) {
156 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
158 return _PC_CAN_NOT_DELETE;
161 //if($uname != $event['uname']) {
162 // return _PC_CAN_NOT_DELETE;
164 unset($event);
166 $output->FormStart(pnModUrl(__POSTCALENDAR__,'user','deleteevents'));
167 $output->FormHidden('pc_eid',$pc_event_id);
168 $output->Text(_PC_DELETE_ARE_YOU_SURE.' ');
169 $output->FormSubmit(_PC_ADMIN_YES);
170 $output->FormEnd();
171 $output->Linebreak(2);
172 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventDetail',array('eid'=>$pc_event_id,'cacheid'=>'','print'=>0,'Date'=>'')));
173 $output->Linebreak(2);
176 return $output->GetOutput();
178 function postcalendar_user_deleteevents()
180 if(!(bool)PC_ACCESS_ADD) {
181 return _POSTCALENDAR_NOAUTH;
185 $pc_eid = pnVarCleanFromInput('pc_eid');
186 $event =& postcalendar_userapi_pcGetEventDetails($pc_eid);
187 $uname = $_SESSION['authUser'];
188 if($uname != $event['uname']) {
189 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
191 return _PC_CAN_NOT_DELETE;
194 unset($event);
196 $output = new pnHTML();
197 $output->SetInputMode(_PNH_VERBATIMINPUT);
198 list($dbconn) = pnDBGetConn();
199 $pntable = pnDBGetTables();
200 $events_table = $pntable['postcalendar_events'];
201 $events_column = &$pntable['postcalendar_events_column'];
202 //hipaa doesn't allow for actual deletes, so just change to inactive
203 //$sql = "DELETE FROM $events_table WHERE $events_column[eid] = '$pc_eid'";
204 $sql = "UPDATE $events_table SET pc_eventstatus = 0 WHERE $events_column[eid] = '$pc_eid'";
205 $dbconn->Execute($sql);
206 $tpl = new pcSmarty();
207 $template_name = _SETTING_TEMPLATE;
208 if(!isset($template_name)) {
209 $template_name = 'default';
211 $tpl->assign('STYLE',$GLOBALS['style']);
212 $output->Text($tpl->fetch($template_name . "/views/header.html"));
213 $output->Text($tpl->fetch($template_name . "/views/global/navigation.html"));
214 $output->Text("<br /><br />");
217 if ($dbconn->ErrorNo() != 0) {
218 $output->Text(_PC_ADMIN_EVENT_ERROR);
219 } else {
222 $output->Text(_PC_ADMIN_EVENTS_DELETED);
224 $output->Text($tpl->fetch($template_name . "/views/footer.html"));
225 // clear the template cache
226 $tpl->clear_all_cache();
228 return $output->GetOutput();
231 //this function is only used by the system to delete temp events used in certain
232 //collision calculations
233 function delete_event($title)
235 list($dbconn) = pnDBGetConn();
236 $pntable = pnDBGetTables();
237 $events_table = $pntable['postcalendar_events'];
238 $events_column = &$pntable['postcalendar_events_column'];
239 //this function is only used by the system to delete temp events used in certain
240 //collision calculations
241 $sql = "DELETE FROM $events_table WHERE pc_eventstatus = " ._EVENT_TEMPORARY ." AND pc_title = '$title'";
242 $dbconn->Execute($sql);
243 if ($dbconn->ErrorNo() != 0) {
244 return 0;
245 } else {
246 return 1;
252 * submit an event
254 function postcalendar_user_edit($args) {return postcalendar_user_submit($args); }
255 function postcalendar_user_submit2($args)
258 if (!(bool)PC_ACCESS_ADD) {
259 return _POSTCALENDARNOAUTH;
261 extract($args);
262 //print_r($_GET);
263 $category = pnVarCleanFromInput('event_category');
264 //print_r($category);
265 print "dble is ".pnVarCleanFromInput('double_book')." data_loaded is ".pnVarCleanFromInput('data_loaded');
266 //print_r($_POST);
267 if(pnVarCleanFromInput('data_loaded') || !empty($category)) //submitting
269 return postcalendar_user_submit2($agrs);
271 else
273 //select the category you wish to add,
274 //using the info from that category we can populate some data
276 $output = new pnHTML();
277 $output->SetInputMode(_PNH_VERBATIMINPUT);
278 $output->Text('<body bgcolor="'.$GLOBALS['style']['BGCOLOR2'].'"></body>');
279 // get the theme globals :: is there a better way to do this?
280 pnThemeLoad(pnUserGetTheme());
281 $all_categories = pnModAPIFunc(__POSTCALENDAR__,'admin','getCategories');
282 $output->Text('<form name="cats" method="post" action="'.pnModURL(__POSTCALENDAR__,'user','submit2', $args).'">');
283 $output->FormHidden('no_nav', $_GET['no_nav']);
284 $output->FormHidden('event_startampm', $_GET['event_startampm']);
285 $output->FormHidden('event_starttimeh', $_GET['event_starttimeh']);
286 $output->FormHidden('event_starttimem', $_GET['event_starttimem']);
287 $output->FormHidden('event_startmonth', $_GET['event_startmonth']);
288 $output->FormHidden('event_startday', $_GET['event_startday']);
289 $output->FormHidden('event_startyear', $_GET['event_startyear']);
290 $output->FormHidden('event_category', $_GET['event_category']);
291 $output->FormHidden('event_dur_minutes', $_GET['event_dur_minutes']);
292 $output->FormHidden('provider_id',$_GET['provider_id']);
293 $output->FormHidden('patient_id', $_GET['patient_id']);
294 $output->FormHidden('module', $_GET['module']);
295 $output->FormHidden('func', $_GET['func']);
296 $output->FormHidden('Date', $_GET['Date']);
297 $select = array();
299 foreach($all_categories as $cat)
301 array_push($select, array('name'=>$cat['name'],'id'=>base64_encode(serialize($cat))));
303 $output->Text('Select a Category');
304 $output->FormSelectMultiple('category', $select);
305 $output->FormSubmit();
306 return $output->GetOutput();
308 //return postcalendar_user_submit2($args);
311 function postcalendar_user_submit($args)
313 // We need at least ADD permission to submit an event
314 if (!(bool)PC_ACCESS_ADD) {
315 return _POSTCALENDARNOAUTH;
318 $output = new pnHTML();
319 $output->SetInputMode(_PNH_VERBATIMINPUT);
322 // get the theme globals :: is there a better way to do this?
323 pnThemeLoad(pnUserGetTheme());
324 global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $textcolor1, $textcolor2;
326 // $category = pnVarCleanFromInput('event_category');
327 $category = pnVarCleanFromInput('category');
329 if(!empty($category))
331 $category = unserialize(base64_decode($category));
332 //print_r($category);
334 else
335 { //print_r($_POST);
336 $cat = $_POST['category'];
338 $category = unserialize(base64_decode($cat));
339 //print_r($category);
341 //print_r($category);
343 // echo("<!-- Here is the argument array: -->\n");
344 // foreach ($args as $tmpkey => $tmpval) { // debugging
345 // echo("<!-- $tmpkey => '$tmpval' -->\n");
346 // }
348 extract($args);
350 $Date =& postcalendar_getDate();
351 $year = substr($Date,0,4);
352 $month = substr($Date,4,2);
353 $day = substr($Date,6,2);
355 // basic event information
356 $event_desc = pnVarCleanFromInput('event_desc');
357 $event_category = pnVarCleanFromInput('event_category');
358 $event_subject = pnVarCleanFromInput('event_subject');
359 $event_sharing = pnVarCleanFromInput('event_sharing');
360 $event_topic = pnVarCleanFromInput('event_topic');
362 //id of the user the event is for
363 $event_userid = pnVarCleanFromInput('event_userid');
364 if (!is_numeric($event_userid))
365 $event_userid = 0;
366 $event_pid = pnVarCleanFromInput('event_pid');
368 if (!is_numeric($event_pid))
369 $event_pid = "";
371 // event start information
372 $event_startmonth = pnVarCleanFromInput('event_startmonth');
373 $event_startday = pnVarCleanFromInput('event_startday');
374 $event_startyear = pnVarCleanFromInput('event_startyear');
375 $event_starttimeh = pnVarCleanFromInput('event_starttimeh');
376 $event_starttimem = pnVarCleanFromInput('event_starttimem');
377 $event_startampm = pnVarCleanFromInput('event_startampm');
379 // location data
380 $event_location = pnVarCleanFromInput('event_location');
381 $event_street1 = pnVarCleanFromInput('event_street1');
382 $event_street2 = pnVarCleanFromInput('event_street2');
383 $event_city = pnVarCleanFromInput('event_city');
384 $event_state = pnVarCleanFromInput('event_state');
385 $event_postal = pnVarCleanFromInput('event_postal');
386 $event_location_info = serialize(compact('event_location', 'event_street1', 'event_street2',
387 'event_city', 'event_state', 'event_postal'));
388 // contact data
389 $event_contname = pnVarCleanFromInput('event_contname');
390 $event_conttel = pnVarCleanFromInput('event_conttel');
391 $event_contemail = pnVarCleanFromInput('event_contemail');
392 $event_website = pnVarCleanFromInput('event_website');
393 $event_fee = pnVarCleanFromInput('event_fee');
394 $event_patient_name = pnVarCleanFromInput('patient_name');
396 // event repeating data
397 if( is_array($category) )
399 //$event_subject =
400 $event_desc = $category['desc'];
401 $event_category = $category['id'];
403 $event_duration = $category['event_duration']; //seconds of the event
404 $event_dur_hours = $event_duration/(60 * 60); //seconds divided by 60 seconds * 60 minutes
405 $event_dur_minutes = ($event_duration%(60 * 60))/60;
406 $event_repeat = $category['event_repeat'];
407 $event_repeat_freq = $category['event_repeat_freq'];
408 $event_repeat_freq_type = $category['event_repeat_freq_type'];
409 $event_repeat_on_num = $category['event_repeat_on_num'];
410 $event_repeat_on_day = $category['event_repeat_on_day'];
411 $event_repeat_on_freq = $category['event_repeat_on_freq'];
412 $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
413 'event_repeat_on_day', 'event_repeat_on_freq'));
415 // event end information
416 $multiple = $category['end_date_freq']." ";
417 switch($category['end_date_type'])
419 case REPEAT_EVERY_DAY:
420 case REPEAT_EVERY_WORK_DAY: //end date is in days
421 $multiple .= "days";
422 break;
423 case REPEAT_EVERY_WEEK; //end date is in weeks
424 $multiple .= "weeks";
425 break;
426 case REPEAT_EVERY_MONTH; //end date is in months
427 $multiple .= "months";
428 break;
429 case REPEAT_EVERY_YEAR: //end date is in years
430 $multiple .= "years";
431 break;
434 $edate = strtotime(pnVarCleanFromInput('Date'));
435 $event_startmonth = date("m", $edate);
436 $event_startday = date("d", $edate);
437 $event_startyear = date("Y", $edate);
438 $event_enddate = strtotime(pnVarCleanFromInput('Date')." + ".$multiple);
439 $event_endmonth = date("m",$event_enddate);
440 $event_endday = date("d",$event_enddate);
441 $event_endyear = date("Y",$event_enddate);
442 $event_endtype = $category['end_date_flag'];
444 // I'm pretty sure this was a bug since 'event_all_day' appears nowhere
445 // else in the code, but it's hard to tell WTF is going on.
446 // $event_allday = $category['event_all_day'];
447 $event_allday = $category['all_day'];
449 else
451 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
452 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
453 $event_duration = (60*60*$event_dur_hours) + (60*$event_dur_minutes);
454 $event_repeat = pnVarCleanFromInput('event_repeat');
455 $event_repeat_freq = pnVarCleanFromInput('event_repeat_freq');
456 $event_repeat_freq_type = pnVarCleanFromInput('event_repeat_freq_type');
457 $event_repeat_on_num = pnVarCleanFromInput('event_repeat_on_num');
458 $event_repeat_on_day = pnVarCleanFromInput('event_repeat_on_day');
459 $event_repeat_on_freq = pnVarCleanFromInput('event_repeat_on_freq');
460 $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
461 'event_repeat_on_day', 'event_repeat_on_freq'));
463 // event end information
464 $event_endmonth = pnVarCleanFromInput('event_endmonth');
465 $event_endday = pnVarCleanFromInput('event_endday');
466 $event_endyear = pnVarCleanFromInput('event_endyear');
467 $event_endtype = pnVarCleanFromInput('event_endtype');
468 $event_allday = pnVarCleanFromInput('event_allday');
471 // Added by Rod:
472 if ($event_allday) {
473 $event_starttimeh = 0;
474 $event_starttimem = 0;
475 $event_startampm = 1;
476 $event_dur_hours = 24;
477 $event_dur_minutes = 0;
478 $event_duration = 60 * 60 * $event_dur_hours;
481 $form_action = pnVarCleanFromInput('form_action');
482 $pc_html_or_text = pnVarCleanFromInput('pc_html_or_text');
483 $pc_event_id = pnVarCleanFromInput('pc_event_id');
484 $data_loaded = pnVarCleanFromInput('data_loaded');
485 $is_update = pnVarCleanFromInput('is_update');
486 $authid = pnVarCleanFromInput('authid');
488 //pennfirm uname matchup future fix
489 //if(pnUserLoggedIn()) { $uname = pnUserGetVar('uname'); }
490 //else { $uname = pnConfigGetVar('anonymous'); }
491 $uname = $_SESSION['authUser'];
492 if(!isset($event_repeat)) { $event_repeat = 0; }
494 if(!isset($pc_event_id) || empty($pc_event_id) || $data_loaded) {
495 // lets wrap all the data into array for passing to submit and preview functions
496 $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
497 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
498 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
499 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
500 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
501 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
502 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',"event_userid","event_pid",
503 'Date','year','month','day','pc_html_or_text','event_patient_name','event_pid');
504 $eventdata['is_update'] = $is_update;
505 $eventdata['pc_event_id'] = $pc_event_id;
506 $eventdata['data_loaded'] = true;
507 $eventdata['category'] = base64_encode(serialize($category));
508 } else {
509 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
511 //echo "uname is:$uname other name is: ".$event['uname'] . "<br />";
512 if($uname != $event['uname']) {
513 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
514 return _PC_CAN_NOT_EDIT;
517 $eventdata['event_subject'] = $event['title'];
518 $eventdata['event_desc'] = $event['hometext'];
519 $eventdata['event_sharing'] = $event['sharing'];
520 $eventdata['event_category'] = $event['catid'];
521 $eventdata['event_topic'] = $event['topic'];
522 $eventdata['event_startmonth'] = substr($event['eventDate'],5,2);
523 $eventdata['event_startday'] = substr($event['eventDate'],8,2);
524 $eventdata['event_startyear'] = substr($event['eventDate'],0,4);
525 $eventdata['event_starttimeh'] = substr($event['startTime'],0,2);
526 $eventdata['event_starttimem'] = substr($event['startTime'],3,2);
527 $eventdata['event_startampm'] = $eventdata['event_starttimeh'] < 12 ? 1 : 2 ; //1 is am , 2 is pm
528 $eventdata['event_endmonth'] = substr($event['endDate'],5,2);
529 $eventdata['event_endday'] = substr($event['endDate'],8,2);
530 $eventdata['event_endyear'] = substr($event['endDate'],0,4);
531 $eventdata['event_endtype'] = $event['endDate'] == '0000-00-00' ? '0' : '1' ;
532 $eventdata['event_dur_hours'] = $event['duration_hours'];
533 $eventdata['event_dur_minutes'] = $event['duration_minutes'];
534 $eventdata['event_duration'] = $event['duration'];
535 $eventdata['event_allday'] = $event['alldayevent'];
536 $loc_data = unserialize($event['location']);
537 $eventdata['event_location'] = $loc_data['event_location'];
538 $eventdata['event_street1'] = $loc_data['event_street1'];
539 $eventdata['event_street2'] = $loc_data['event_street2'];
540 $eventdata['event_city'] = $loc_data['event_city'];
541 $eventdata['event_state'] = $loc_data['event_state'];
542 $eventdata['event_postal'] = $loc_data['event_postal'];
543 $eventdata['event_location_info'] = $loc_data;
544 $eventdata['event_contname'] = $event['contname'];
545 $eventdata['event_conttel'] = $event['conttel'];
546 $eventdata['event_contemail'] = $event['contemail'];
547 $eventdata['event_website'] = $event['website'];
548 $eventdata['event_fee'] = $event['fee'];
549 $eventdata['event_repeat'] = $event['recurrtype'];
550 $rspecs = unserialize($event['recurrspec']);
551 $eventdata['event_repeat_freq'] = $rspecs['event_repeat_freq'];
552 $eventdata['event_repeat_freq_type'] = $rspecs['event_repeat_freq_type'];
553 $eventdata['event_repeat_on_num'] = $rspecs['event_repeat_on_num'];
554 $eventdata['event_repeat_on_day'] = $rspecs['event_repeat_on_day'];
555 $eventdata['event_repeat_on_freq'] = $rspecs['event_repeat_on_freq'];
556 $eventdata['event_recurrspec'] = $rspecs;
557 $eventdata['uname'] = $uname;
558 $eventdata['event_userid'] = $event['event_userid'];
559 $eventdata['event_pid'] = $event['pid'];
560 $eventdata['event_aid'] = $event['aid'];
561 $eventdata['Date'] = $Date;
562 $eventdata['year'] = $year;
563 $eventdata['month'] = $month;
564 $eventdata['day'] = $day;
565 $eventdata['is_update'] = true;
566 $eventdata['pc_event_id'] = $pc_event_id;
567 $event_data['patient_name'] = $event_patient_name;
568 $eventdata['data_loaded'] = true;
569 $eventdata['pc_html_or_text'] = $pc_html_or_text;
570 $eventdata['category'] = base64_encode(serialize($category));
573 // lets get the module's information
574 $modinfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__));
575 $categories = pnModAPIFunc(__POSTCALENDAR__,'user','getCategories');
576 $output->tabindex=1;
578 //================================================================
579 // ERROR CHECKING
580 //================================================================
581 // removed event_desc as a required_var
583 $required_vars = array('event_subject');
584 $required_name = array(_PC_EVENT_TITLE,_PC_EVENT_DESC);
585 $error_msg = '';
586 $output->SetOutputMode(_PNH_RETURNOUTPUT);
587 $reqCount = count($required_vars);
588 //print_r($eventdata);
589 for ($r=0; $r<$reqCount; $r++) {
590 if(empty($$required_vars[$r]) || !preg_match('/\S/i',$$required_vars[$r])) {
591 $error_msg .= $output->Text('<b>'.$required_name[$r].'</b> '._PC_SUBMIT_ERROR4);
592 $error_msg .= $output->Linebreak();
595 unset($reqCount);
596 // check repeating frequencies
597 if($event_repeat == REPEAT) {
599 //can't have a repeating event that doesnt have an end date
600 if ($event_endtype == 0) {
601 $error_msg .= $output->Text("Repeating events must have an end date set.");
602 $error_msg .= $output->Linebreak();
604 if(!isset($event_repeat_freq) || $event_repeat_freq < 1 || empty($event_repeat_freq)) {
605 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
606 $error_msg .= $output->Linebreak();
607 } elseif(!is_numeric($event_repeat_freq)) {
608 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
609 $error_msg .= $output->Linebreak();
611 } elseif($event_repeat == REPEAT_ON) {
612 //can't have a repeating event that doesnt have an end date
613 if ($event_endtype == 0) {
614 $error_msg .= $output->Text("Repeating events must have an end date set.");
615 $error_msg .= $output->Linebreak();
617 if(!isset($event_repeat_on_freq) || $event_repeat_on_freq < 1 || empty($event_repeat_on_freq)) {
618 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
619 $error_msg .= $output->Linebreak();
620 } elseif(!is_numeric($event_repeat_on_freq)) {
621 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
622 $error_msg .= $output->Linebreak();
625 // check date validity
626 if(_SETTING_TIME_24HOUR) {
627 $startTime = $event_starttimeh.':'.$event_starttimem;
628 $endTime = $event_endtimeh.':'.$event_endtimem;
629 } else {
630 if($event_startampm == _AM_VAL) {
631 $event_starttimeh = $event_starttimeh == 12 ? '00' : $event_starttimeh;
632 } else {
633 $event_starttimeh = $event_starttimeh != 12 ? $event_starttimeh+=12 : $event_starttimeh;
635 $startTime = $event_starttimeh.':'.$event_starttimem;
637 $sdate = strtotime($event_startyear.'-'.$event_startmonth.'-'.$event_startday);
638 $edate = strtotime($event_endyear.'-'.$event_endmonth.'-'.$event_endday);
639 $tdate = strtotime(date('Y-m-d'));
640 if($edate < $sdate && $event_endtype == 1) {
641 $error_msg .= $output->Text(_PC_SUBMIT_ERROR1);
642 $error_msg .= $output->Linebreak();
644 if(!checkdate($event_startmonth,$event_startday,$event_startyear)) {
645 $error_msg .= $output->Text(_PC_SUBMIT_ERROR2 . " '$event_startyear-$event_startmonth-$event_startday'");
646 $error_msg .= $output->Linebreak();
648 if(!checkdate($event_endmonth,$event_endday,$event_endyear)) {
649 $error_msg .= $output->Text(_PC_SUBMIT_ERROR3 . " '$event_endyear-$event_endmonth-$event_endday'");
650 $error_msg .= $output->Linebreak();
653 //check limit on category
654 if(($ret = checkCategoryLimits($eventdata)) != null)
656 $error_msg .= $output->Text("This category has a limit of $ret[limit] between $ret[start] and $ret[end] which you have exceeded.");
657 $error_msg .= $output->Linebreak();
658 //$output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
659 //return $output->GetOutput();
661 //echo "fa: " . $form_action . " double_book: " . pnVarCleanFromInput("double_book") . " update: " . $eventdata['is_update'] . " em: " . $error_msg;
662 //event collision check
664 if($form_action == "commit" && pnVarCleanFromInput("double_book") != 1 && !$eventdata['is_update'] && empty($error_msg) ) {
665 //check on new shceduling events(in or out of office) to make sure that
666 //you don't have more than one set per day
667 //event category 1 is in office, event category 2 is out of office
669 if ($eventdata['event_category'] == 2 || $eventdata['event_category'] == 3) {
670 $searchargs = array();
671 $searchargs['start'] = $eventdata['event_startmonth'] . "/" . $eventdata['event_startday'] ."/". $eventdata['event_startyear'];
672 $searchargs['end'] = $eventdata['event_endmonth'] . "/" . $eventdata['event_endday'] ."/". $eventdata['event_endyear'];
673 $searchargs['provider_id'] = $eventdata['event_userid'];
675 //faFLag uses pcgeteventsfa, which can search on provider
676 $searchargs['faFlag'] = true;
677 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) ";
678 //print_r($searchargs);
680 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
681 $ekey = md5($event_data['subject'] . date("U") . rand(0,1000));
682 $oldstatus = $eventdata['event_status'];
683 $oldtitle = $eventdata['event_subject'];
684 $old_patient_name = $eventdata['patient_name'];
685 $old_dur_hours = $eventdata['event_dur_hours'];
686 $old_dur_min = $eventdata['event_dur_minutes'];
687 $old_duration = $eventdata['event_duration'];
688 $eventdata['event_subject'] = mysql_real_escape_string($ekey);
689 $eventdata['event_status'] = _EVENT_TEMPORARY;
691 if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
692 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
693 $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 />");
694 $error_msg .= $output->Text('</div></center>');
695 $error_msg .= $output->Linebreak();
696 $error_msg .= $output->Text($dbconn->ErrorMsg());
698 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) AND a.pc_title = '" . $eventdata['event_subject'] . "' ";
699 $searchargs['event_status'] = _EVENT_TEMPORARY;
700 $submitEventByDate =& postcalendar_userapi_pcGetEvents($searchargs);
702 if(!delete_event($ekey)) {
703 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
704 $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 />");
705 $error_msg .= $output->Text('</div></center>');
706 $error_msg .= $output->Linebreak();
707 $error_msg .= $output->Text($dbconn->ErrorMsg());
710 $eventdata['event_status'] = $oldstatus;
711 $eventdata['event_subject'] = $oldtitle;
712 $eventdata['patient_name '] = $old_patient_name;
713 $eventdata['event_dur_hours'] = $old_dur_hour;
714 $eventdata['event_dur_minutes'] = $old_dur_min;
716 foreach ($submitEventByDate as $date => $newevent) {
717 if (count($eventsByDate[$date]) > 0 && count($newevent) > 0) {
718 foreach ($eventsByDate[$date] as $con_event) {
719 if ($con_event['catid'] == $newevent[0]['catid']) {
720 $error_msg .= $output->Text('There is a conflict on ' . $date . ' with event ' . $con_event['title']);
721 $error_msg .= $output->Linebreak();
726 /*echo "<br /><br />";
727 print_r($eventsByDate);
728 echo "<br /><br />";
729 print_r($submitEventByDate);*/
732 $colls = checkEventCollision($eventdata);
733 if (count($colls) > 0) {
734 foreach ($colls as $coll) {
735 $error_msg .= $output->Text("Event Collides with: " . $coll['title'] . " at " . date("g:i a", strtotime($coll['startTime'])) . "<br />");
736 $error_msg .= $output->Linebreak();
738 $error_msg .= $output->Text("Submit again to \"Double Book\" <br />To change values click back in your browser.");
739 $error_msg .= $output->Linebreak();
740 // the following line will display "DOUBLE BOOKED" if when adding an event there is a collistion with anothe appointment
741 //$eventdata['event_subject'] = "DOUBLE BOOKED " . $eventdata['event_subject'];
742 $eventdata['double_book'] = 1;
746 $output->SetOutputMode(_PNH_KEEPOUTPUT);
747 if($form_action == 'preview') {
748 //================================================================
749 // Preview the event
750 //================================================================
751 // check authid
752 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
753 if(!empty($error_msg)) {
754 $preview = false;
755 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
756 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
757 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
758 $output->Linebreak();
759 $output->Text($error_msg);
760 $output->Text('</td></td></table>');
761 $output->Text('</td></td></table>');
762 $output->Linebreak(2);
763 } else {
764 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventPreview',$eventdata));
765 $output->Linebreak();
767 } elseif($form_action == 'commit') {
769 //================================================================
770 // Enter the event into the DB
771 //================================================================
772 if (!empty($error_msg)) {
773 if (!pnSecConfirmAuthKey(true)) { return(_NO_DIRECT_ACCESS); }
775 else {
776 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
778 if(!empty($error_msg)) {
779 $preview = false;
780 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
781 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
782 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
783 $output->Linebreak();
784 $output->Text($error_msg);
785 $output->Text('</td></td></table>');
786 $output->Text('</td></td></table>');
787 $output->Linebreak(2);
788 } else {
789 if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
790 $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
791 $output->Text("<b>"._PC_EVENT_SUBMISSION_FAILED."</b>");
792 $output->Text('</div></center>');
793 $output->Linebreak();
794 $output->Text($dbconn->ErrorMsg());
795 } else {
796 // clear the Smarty cache
797 $tpl = new pcSmarty();
798 $tpl->clear_all_cache();
799 $output->Text('<center><div style="padding:5px; border:1px solid green; background-color: lightgreen;">');
800 if($is_update) {
801 $output->Text("<b>"._PC_EVENT_EDIT_SUCCESS."</b>");
802 } else {
803 $output->Text("<b>"._PC_EVENT_SUBMISSION_SUCCESS."</b>");
805 $output->Text('</div></center>');
806 $output->Linebreak();
807 // clear the form vars
808 $event_subject=$event_desc=$event_sharing=$event_category=$event_topic=
809 $event_startmonth=$event_startday=$event_startyear=$event_starttimeh=$event_starttimem=$event_startampm=
810 $event_endmonth=$event_endday=$event_endyear=$event_endtype=$event_dur_hours=$event_dur_minutes=
811 $event_duration=$event_allday=$event_location=$event_street1=$event_street2=$event_city=$event_state=
812 $event_postal=$event_location_info=$event_contname=$event_conttel=$event_contemail=
813 $event_website=$event_fee=$event_repeat=$event_repeat_freq=$event_repeat_freq_type=
814 $event_repeat_on_num=$event_repeat_on_day=$event_repeat_on_freq=$event_recurrspec=$uname=
815 $Date=$year=$month=$day=$pc_html_or_text=$event_patient_name=$evnet_pid=null;
816 $is_update = false;
817 $pc_event_id = 0;
819 //$_SESSION['category'] = "";
820 // lets wrap all the data into array for passing to submit and preview functions
821 $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
822 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
823 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
824 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
825 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
826 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
827 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',
828 'Date','year','month','day','pc_html_or_text','is_update','pc_event_id','event_patient_name');
829 //if no using the no_nav format then show form again after submit
830 if (pnVarCleanFromInput("no_nav") == 1) {
831 return $output->GetOutput();
837 $output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
838 return $output->GetOutput();
843 * search events
845 function postcalendar_user_search()
847 if (!(bool)PC_ACCESS_OVERVIEW) { return _POSTCALENDARNOAUTH; }
849 $tpl = new pcSmarty();
850 $k = formData("pc_keywords","R"); //from library/formdata.inc.php
851 $k_andor = pnVarCleanFromInput('pc_keywords_andor');
852 $pc_category = pnVarCleanFromInput('pc_category');
853 $pc_facility = pnVarCleanFromInput('pc_facility');
854 $pc_topic = pnVarCleanFromInput('pc_topic');
855 $submit = pnVarCleanFromInput('submit');
856 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
857 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
858 $start = pnVarCleanFromInput('start');
859 $end = pnVarCleanFromInput('end');
861 // get list of categories for the user to choose from
862 $categories = postcalendar_userapi_getCategories();
863 $cat_options = '';
864 foreach($categories as $category) {
865 $selected = "";
866 if ($pc_category == $category[id]) { $selected = " SELECTED "; }
867 //modified 8/09 by BM to allow translation if applicable
868 $cat_options .= "<option value=\"$category[id]\" $selected>" . xl_appt_category($category[name]) . "</option>";
870 $tpl->assign_by_ref('CATEGORY_OPTIONS',$cat_options);
872 $tpl->assign('event_dur_hours', $event_dur_hours);
873 $tpl->assign('event_dur_minutes', $event_dur_minutes);
875 // create default start and end dates for the search form
876 if (isset($start) && $start != "") $tpl->assign('DATE_START', $start);
877 else $tpl->assign('DATE_START', date("m/d/Y"));
878 if (isset($end) && $end!= "") $tpl->assign('DATE_END', $end);
879 else $tpl->assign('DATE_END', date("m/d/Y", strtotime("+7 Days", time())));
881 // then override the setting if we have a value from the submitted form
882 $ProviderID = pnVarCleanFromInput("provider_id");
883 if (is_numeric($ProviderID)) { $tpl->assign('ProviderID', $ProviderID);; }
884 elseif ($ProviderID == "_ALL_") { } // do nothing
885 else { $tpl->assign('ProviderID', ""); }
887 $provinfo = getProviderInfo();
888 $tpl->assign('providers', $provinfo);
889 // build a list of provider-options for the select box on the input form -- JRM
890 $provider_options = "<option value='_ALL_' ";
891 if ($ProviderID == "_ALL_") { $provider_options .= " SELECTED "; }
892 $provider_options .= ">" . xl('All Providers') . "</option>";
893 foreach ($provinfo as $provider) {
894 $selected = "";
895 // if we don't have a ProviderID chosen, pick the first one from the
896 // pc_username Session variable
897 if ($ProviderID == "") {
898 // that variable stores the 'username' and not the numeric 'id'
899 if ($_SESSION['pc_username'][0] == $provider['username']) {
900 $selected = " SELECTED ";
903 else if ($ProviderID == $provider['id']) { $selected = " SELECTED "; }
904 $provider_options .= "<option value=\"".$provider['id']."\" ".$selected.">";
905 $provider_options .= $provider['lname'].", ".$provider['fname']."</option>";
907 $tpl->assign_by_ref('PROVIDER_OPTIONS',$provider_options);
909 // build a list of facility options for the select box on the input form -- JRM
910 $facilities = getFacilities();
911 $fac_options = "<option value=''>" . xl('All Facilities') . "</option>";
912 foreach ($facilities as $facility) {
913 $selected = "";
914 if ($facility['id'] == $pc_facility) $selected = " SELECTED ";
915 $fac_options .= "<option value=\"".$facility['id']."\" ".$selected.">";
916 $fac_options .= $facility['name']."</option>";
918 $tpl->assign_by_ref('FACILITY_OPTIONS',$fac_options);
920 $PatientID = pnVarCleanFromInput("patient_id");
921 // limit the number of results returned by getPatientPID
922 // this helps to prevent the server from stalling on a request with
923 // no PID and thousands of PIDs in the database -- JRM
924 // the function getPatientPID($pid, $given, $orderby, $limit, $start) <-- defined in library/patient.inc
925 $plistlimit = 500;
926 if (is_numeric($PatientID)) {
927 $tpl->assign('PatientList', getPatientPID(array('pid'=>$PatientID, 'limit'=>$plistlimit)));
929 else {
930 $tpl->assign('PatientList', getPatientPID(array('limit' =>$plistlimit)));
932 $event_endday = pnVarCleanFromInput("event_endday");
933 $event_endmonth = pnVarCleanFromInput("event_endmonth");
934 $event_endyear = pnVarCleanFromInput("event_endyear");
936 $event_startday = pnVarCleanFromInput("event_startday");
937 $event_startmonth = pnVarCleanFromInput("event_startmonth");
938 $event_startyear = pnVarCleanFromInput("event_startyear");
939 if($event_startday > $event_endday) { $event_endday = $event_startday; }
940 if($event_startmonth > $event_endmonth) { $event_endmonth = $event_startmonth; }
941 if($event_startyear > $event_endyear) { $event_endyear = $event_startyear; }
943 $tpl->assign('patient_id', $PatientID);
944 $tpl->assign('provider_id', $ProviderID);
945 $tpl->assign("event_category", pnVarCleanFromInput("event_category"));
946 $tpl->assign("event_subject", pnVarCleanFromInput("event_subject"));
947 $output = new pnHTML();
948 $output->SetOutputMode(_PNH_RETURNOUTPUT);
949 if(_SETTING_USE_INT_DATES) {
951 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
952 $formdata = $output->FormSelectMultiple('event_startday', $sel_data);
953 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
954 $formdata .= $output->FormSelectMultiple('event_startmonth', $sel_data);
955 } else {
956 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
957 $formdata = $output->FormSelectMultiple('event_startmonth', $sel_data);
958 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
959 $formdata .= $output->FormSelectMultiple('event_startday', $sel_data);
961 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_startyear));
962 $formdata .= $output->FormSelectMultiple('event_startyear', $sel_data);
963 $output->SetOutputMode(_PNH_KEEPOUTPUT);
964 $tpl->assign('SelectDateTimeStart', $formdata);
965 $output->SetOutputMode(_PNH_RETURNOUTPUT);
966 if(_SETTING_USE_INT_DATES) {
967 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday));
968 $formdata = $output->FormSelectMultiple('event_endday', $sel_data);
969 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
970 $formdata .= $output->FormSelectMultiple('event_endmonth', $sel_data);
971 } else {
972 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
973 $formdata = $output->FormSelectMultiple('event_endmonth', $sel_data);
974 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday ));
975 $formdata .= $output->FormSelectMultiple('event_endday', $sel_data);
977 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_endyear));
978 $formdata .= $output->FormSelectMultiple('event_endyear', $sel_data);
979 $output->SetOutputMode(_PNH_KEEPOUTPUT);
980 $tpl->assign('SelectDateTimeEnd', $formdata);
981 $output = null;
982 if(_SETTING_DISPLAY_TOPICS) {
983 $topics = postcalendar_userapi_getTopics();
984 $top_options = '';
985 foreach($topics as $topic) {
986 $top_options .= "<option value=\"$topic[id]\">$topic[text]</option>";
988 $tpl->assign_by_ref('TOPIC_OPTIONS',$top_options);
990 //=================================================================
991 // Find out what Template we're using
992 //=================================================================
993 $template_name = _SETTING_TEMPLATE;
994 if(!isset($template_name)) {
995 $template_name = 'default';
997 //=================================================================
998 // Output the search form
999 //=================================================================
1000 $tpl->assign('FORM_ACTION',pnModURL(__POSTCALENDAR__,'user','search'));
1001 //=================================================================
1002 // Perform the search if we have data
1003 //=================================================================
1004 if(!empty($submit) && strtolower($submit) == "find first") {
1005 // not sure how we get here...
1006 $searchargs = array();
1007 $searchargs['start'] = pnVarCleanFromInput("event_startmonth") . "/" . pnVarCleanFromInput("event_startday") ."/". pnVarCleanFromInput("event_startyear");
1008 $searchargs['end'] = pnVarCleanFromInput("event_endmonth") . "/" . pnVarCleanFromInput("event_endday") ."/". pnVarCleanFromInput("event_endyear");
1009 $searchargs['provider_id'] = pnVarCleanFromInput("provider_id");
1010 $searchargs['faFlag'] = true;
1011 //print_r($searchargs);
1012 //echo "<br />";
1013 //set defaults to current week if empty
1014 if ($searchargs['start'] == "//") {
1015 $searchargs['start'] = date("m/d/Y");
1017 if ($searchargs['end'] == "//") {
1018 $searchargs['end'] = date("m/d/Y", strtotime("+7 Days", strtotime($searchargs['start'])));
1020 //print_r($searchargs);
1021 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1022 //print_r($eventsByDate);
1023 $found = findFirstAvailable($eventsByDate);
1024 $tpl->assign('available_times',$found);
1025 //print_r($_POST);
1027 $tpl->assign('SEARCH_PERFORMED',true);
1028 $tpl->assign('A_EVENTS',$eventsByDate);
1030 if(!empty($submit) && strtolower($submit) == "listapps") {
1031 // not sure how we get here...
1032 $searchargs = array();
1033 $searchargs['start'] = date("m/d/Y");
1034 $searchargs['end'] = date("m/d/Y",strtotime("+1 year",strtotime($searchargs['start'])));
1035 $searchargs['patient_id'] = pnVarCleanFromInput("patient_id");
1036 $searchargs['listappsFlag'] = true;
1038 $sqlKeywords .= "(a.pc_pid = '" . pnVarCleanFromInput("patient_id") . "' )";
1040 $searchargs['s_keywords'] = $sqlKeywords;
1041 //print_r($searchargs);
1042 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1043 //print_r($eventsByDate);
1044 $tpl->assign('appointments',$eventsByDate);
1045 //print_r($_POST);
1047 $tpl->assign('SEARCH_PERFORMED',true);
1048 $tpl->assign('A_EVENTS',$eventsByDate);
1050 elseif(!empty($submit)) {
1053 // we get here by searching via the PostCalendar search
1054 $sqlKeywords = '';
1055 $keywords = explode(' ',$k);
1056 // build our search query
1057 foreach($keywords as $word) {
1058 if(!empty($sqlKeywords)) $sqlKeywords .= " $k_andor ";
1059 $sqlKeywords .= '(';
1060 $sqlKeywords .= "pd.lname LIKE '%$word%' OR ";
1061 $sqlKeywords .= "pd.fname LIKE '%$word%' OR ";
1062 $sqlKeywords .= "u.lname LIKE '%$word%' OR ";
1063 $sqlKeywords .= "u.fname LIKE '%$word%' OR ";
1064 $sqlKeywords .= "a.pc_title LIKE '%$word%' OR ";
1065 $sqlKeywords .= "a.pc_hometext LIKE '%$word%' OR ";
1066 $sqlKeywords .= "a.pc_location LIKE '%$word%'";
1067 $sqlKeywords .= ') ';
1071 if(!empty($pc_category)) {
1072 $s_category = "a.pc_catid = '$pc_category'";
1075 if(!empty($pc_topic)) {
1076 $s_topic = "a.pc_topic = '$pc_topic'";
1079 $searchargs = array();
1080 if(!empty($sqlKeywords)) $searchargs['s_keywords'] = $sqlKeywords;
1081 if(!empty($s_category)) $searchargs['s_category'] = $s_category;
1082 if(!empty($s_topic)) $searchargs['s_topic'] = $s_topic;
1084 // some new search parameters introduced in the ajax_search form... JRM March 2008
1086 // the ajax_search form has form parameters for 'start' and 'end' already built in
1087 // so use them if available
1088 $tmpDate = pnVarCleanFromInput("start");
1089 if (isset($tmpDate) && $tmpDate != "")
1090 $searchargs['start'] = pnVarCleanFromInput("start");
1091 else $searchargs['start'] = "//";
1092 $tmpDate = pnVarCleanFromInput("end");
1093 if (isset($tmpDate) && $tmpDate != "")
1094 $searchargs['end'] = pnVarCleanFromInput("end");
1095 else $searchargs['end'] = "//";
1097 // we can limit our search by provider -- JRM March 2008
1098 if (isset($ProviderID) && $ProviderID != "") { // && $ProviderID != "_ALL_") {
1099 $searchargs['provider_id'] = array();
1100 array_push($searchargs['provider_id'], $ProviderID);
1102 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1104 // we can limit our search by facility -- JRM March 2008
1105 if (isset($pc_facility) && $pc_facility != "") {
1106 $searchargs['pc_facility'] = $pc_facility;
1109 //print_r($eventsByDate);
1110 $tpl->assign('SEARCH_PERFORMED',true);
1111 $tpl->assign('A_EVENTS',$eventsByDate);
1113 $tpl->caching = false;
1114 $tpl->assign('STYLE',$GLOBALS['style']);
1115 $pageSetup =& pnModAPIFunc(__POSTCALENDAR__,'user','pageSetup');
1116 if (pnVarCleanFromInput("no_nav") == 1) {
1117 $return = $pageSetup . $tpl->fetch($template_name.'/user/findfirst.html');
1119 elseif (pnVarCleanFromInput("no_nav") == 2) {
1120 $return = $pageSetup . $tpl->fetch($template_name.'/user/listapps.html');
1122 else {
1123 $return = $pageSetup . $tpl->fetch($template_name.'/user/search.html');
1125 return $return;
1128 function checkCategoryLimits($eventdata)
1130 extract($eventdata);
1131 //print_r($eventdata);
1132 //print "$event_starttimeh:$event_starttimem";
1134 $limits = & pnModAPIFunc(__POSTCALENDAR__,'user','getCategoryLimits');
1135 //print_r($limits);
1136 foreach($limits as $limit)
1138 if($limit['catid'] == $event_category) //have a limit
1140 //print_r($limit);
1141 $sdate = ($event_startmonth.'/'.$event_startday.'/'
1142 .$event_startyear);
1143 $edate = $sdate;
1144 $stime = date("H:i:00",strtotime($limit['startTime']));
1145 $etime = date("H:i:00",strtotime($limit['endTime']));
1146 if($is_update)
1148 $searchText = "a.pc_eid != '$pc_event_id' AND ";
1150 //echo "stime is: $stime, etime is: $etime sdate is: $sdate edate is: $edate<br />";
1151 $a = array('s_category' => " a.pc_catid = $event_category",'start'=>$edate,
1152 'end'=>$sdate, 'stime' => $stime, 'etime' => $etime,'providerID'=>$event_userid,
1153 's_keywords'=>$searchText."a.pc_starttime >= '$stime' AND a.pc_endtime <= '$etime'");
1154 $eventsByDate =& postcalendar_userapi_pcGetEvents($a);
1155 //print_r($eventsByDate);
1156 $ret = null;
1157 foreach ($eventsByDate as $day)
1159 //if event time falls within limit time check
1160 //hour from forms is 12 not 24 format, convert here
1161 if($event_startampm == 2 && $event_starttimeh != 12)
1162 $event_starttimeh += 12;
1163 elseif ($event_startampm == 1 && $event_starttimeh == 12)
1164 $event_starttimeh -= 12;
1165 $event_starttime = date("H:i:00",strtotime($event_starttimeh.":".$event_starttimem.":"."00"));
1166 $event_endtime = date("H:i:00",strtotime($event_endtimeh.":".$event_endtimem.":"."00"));
1168 if( $event_starttime >= $limit['startTime'])
1170 $numToday = count($day);
1172 if($numToday >= $limit['limit'])
1174 //reached limit
1175 $ret = array("start"=>$limit['startTime'],"end"=>$limit['endTime'],
1176 "limit"=>$limit['limit']);
1177 return $ret;
1179 }//if in limit time span
1184 return null;
1186 /*list($dbconn) = pnDBGetConn();
1187 $pntable = pnDBGetTables();
1188 $event_table = $pntable['postcalendar_events'];
1189 //get all of todays events
1190 $starting_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1191 $ending_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1192 //select all of the limits
1193 $limits = & pnModAPIFunc(__POSTCALENDAR__,'user','getCategoryLimits');
1194 //for each limit for this category id, make sure you won't exceed the limit
1195 foreach($limits as $limit)
1197 if(($key = array_search($eventdata['cat_id'])) != false)
1199 $sql = "SELECT count(pc_eid) from $event_table where "