hopefully all-day events will work now
[openemr.git] / interface / main / calendar / modules / PostCalendar / pnuser.php
blobb6156e6b05c87359ca9a30285833895fe40440f3
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 //=========================================================================
35 // start the main postcalendar application
36 //=========================================================================
37 function postcalendar_user_main()
39 // check the authorization
41 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; }
42 // get the date and go to the view function
43 $Date = postcalendar_getDate();
44 return postcalendar_user_view(array('Date'=>$Date));
48 /**
49 * view items
50 * This is a standard function to provide an overview of all of the items
51 * available from the module.
53 function postcalendar_user_view()
55 if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; }
56 // get the vars that were passed in
57 list($Date,
58 $print,
59 $viewtype,
60 $jumpday,
61 $jumpmonth,
62 $jumpyear) = pnVarCleanFromInput('Date',
63 'print',
64 'viewtype',
65 'jumpday',
66 'jumpmonth',
67 'jumpyear');
68 $Date =& postcalendar_getDate();
69 if(!isset($viewtype)) $viewtype = _SETTING_DEFAULT_VIEW;
70 return postcalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date,'print'=>$print)) . postcalendar_footer();
73 /**
74 * display item
75 * This is a standard function to provide detailed information on a single item
76 * available from the module.
78 function postcalendar_user_display($args)
80 list($eid, $viewtype, $tplview,
81 $pc_username, $Date, $print, $category, $topic) = pnVarCleanFromInput('eid', 'viewtype', 'tplview',
82 'pc_username', 'Date', 'print', 'pc_category', 'pc_topic');
84 extract($args);
85 if(empty($Date) && empty($viewtype)) {
86 return false;
88 if(empty($tplview)) $tplview = 'default';
89 $uid = pnUserGetVar('uid');
90 $theme = pnUserGetTheme();
92 //$cacheid = md5($Date.$viewtype.$tplview._SETTING_TEMPLATE.$eid.$print.$uid.'u'.$pc_username.$theme.'c'.$category.'t'.$topic);
93 $cacheid = md5(strtotime("now"));
95 switch ($viewtype)
97 case 'details':
98 if (!(bool)PC_ACCESS_READ) {
99 return _POSTCALENDARNOAUTH;
101 $event = pnModAPIFunc('PostCalendar','user','eventDetail',array('eid'=>$eid,
102 'Date'=>$Date,
103 'print'=>$print,
104 'cacheid'=>$cacheid));
105 if($event === false) {
106 pnRedirect(pnModURL(__POSTCALENDAR__,'user'));
108 $out = "\n\n<!-- START user_display -->\n\n";
109 $out .= $event;
110 $out .= "\n\n<!-- END user_display -->\n\n";
111 break;
113 default :
114 if (!(bool)PC_ACCESS_OVERVIEW) {
115 return _POSTCALENDARNOAUTH;
117 $out = "\n\n<!-- START user_display -->\n\n";
118 $out .= pnModAPIFunc('PostCalendar','user','buildView',array('Date'=>$Date,
119 'viewtype'=>$viewtype,
120 'cacheid'=>$cacheid));
121 $out .= "\n\n<!-- END user_display -->\n\n";
122 break;
124 // Return the output that has been generated by this function
125 return $out;
127 function postcalendar_user_delete()
129 if(!(bool)PC_ACCESS_ADD) {
130 return _POSTCALENDAR_NOAUTH;
133 $output =& new pnHTML();
134 $output->SetInputMode(_PNH_VERBATIMINPUT);
136 $uname = $_SESSION['authUser'];
137 list($action,$pc_event_id) = pnVarCleanFromInput('action','pc_event_id');
138 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
139 if($uname != $event['uname']) {
140 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
142 return _PC_CAN_NOT_DELETE;
145 //if($uname != $event['uname']) {
146 // return _PC_CAN_NOT_DELETE;
148 unset($event);
150 $output->FormStart(pnModUrl(__POSTCALENDAR__,'user','deleteevents'));
151 $output->FormHidden('pc_eid',$pc_event_id);
152 $output->Text(_PC_DELETE_ARE_YOU_SURE.' ');
153 $output->FormSubmit(_PC_ADMIN_YES);
154 $output->FormEnd();
155 $output->Linebreak(2);
156 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventDetail',array('eid'=>$pc_event_id,'cacheid'=>'','print'=>0,'Date'=>'')));
157 $output->Linebreak(2);
160 return $output->GetOutput();
162 function postcalendar_user_deleteevents()
164 if(!(bool)PC_ACCESS_ADD) {
165 return _POSTCALENDAR_NOAUTH;
169 $pc_eid = pnVarCleanFromInput('pc_eid');
170 $event =& postcalendar_userapi_pcGetEventDetails($pc_eid);
171 $uname = $_SESSION['authUser'];
172 if($uname != $event['uname']) {
173 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
175 return _PC_CAN_NOT_DELETE;
178 unset($event);
180 $output =& new pnHTML();
181 $output->SetInputMode(_PNH_VERBATIMINPUT);
182 list($dbconn) = pnDBGetConn();
183 $pntable = pnDBGetTables();
184 $events_table = $pntable['postcalendar_events'];
185 $events_column = &$pntable['postcalendar_events_column'];
186 //hipaa doesn't allow for actual deletes, so just change to inactive
187 //$sql = "DELETE FROM $events_table WHERE $events_column[eid] = '$pc_eid'";
188 $sql = "UPDATE $events_table SET pc_eventstatus = 0 WHERE $events_column[eid] = '$pc_eid'";
189 $dbconn->Execute($sql);
190 $tpl =& new pcSmarty();
191 $template_name = _SETTING_TEMPLATE;
192 if(!isset($template_name)) {
193 $template_name = 'default';
195 $tpl->assign('STYLE',$GLOBALS['style']);
196 $output->Text($tpl->fetch($template_name . "/views/header.html"));
197 $output->Text($tpl->fetch($template_name . "/views/global/navigation.html"));
198 $output->Text("<br /><br />");
201 if ($dbconn->ErrorNo() != 0) {
202 $output->Text(_PC_ADMIN_EVENT_ERROR);
203 } else {
206 $output->Text(_PC_ADMIN_EVENTS_DELETED);
208 $output->Text($tpl->fetch($template_name . "/views/footer.html"));
209 // clear the template cache
210 $tpl->clear_all_cache();
212 return $output->GetOutput();
215 //this function is only used by the system to delete temp events used in certain
216 //collision calculations
217 function delete_event($title)
219 list($dbconn) = pnDBGetConn();
220 $pntable = pnDBGetTables();
221 $events_table = $pntable['postcalendar_events'];
222 $events_column = &$pntable['postcalendar_events_column'];
223 //this function is only used by the system to delete temp events used in certain
224 //collision calculations
225 $sql = "DELETE FROM $events_table WHERE pc_eventstatus = " ._EVENT_TEMPORARY ." AND pc_title = '$title'";
226 $dbconn->Execute($sql);
227 if ($dbconn->ErrorNo() != 0) {
228 return 0;
229 } else {
230 return 1;
236 * submit an event
238 function postcalendar_user_edit($args) {return postcalendar_user_submit($args); }
239 function postcalendar_user_submit2($args)
242 if (!(bool)PC_ACCESS_ADD) {
243 return _POSTCALENDARNOAUTH;
245 extract($args);
246 //print_r($_GET);
247 $category = pnVarCleanFromInput('event_category');
248 //print_r($category);
249 print "dble is ".pnVarCleanFromInput('double_book')." data_loaded is ".pnVarCleanFromInput('data_loaded');
250 //print_r($_POST);
251 if(pnVarCleanFromInput('data_loaded') || !empty($category)) //submitting
253 return postcalendar_user_submit2($agrs);
255 else
257 //select the category you wish to add,
258 //using the info from that category we can populate some data
260 $output =& new pnHTML();
261 $output->SetInputMode(_PNH_VERBATIMINPUT);
262 $output->Text('<body bgcolor="'.$GLOBALS['style']['BGCOLOR2'].'"></body>');
263 // get the theme globals :: is there a better way to do this?
264 pnThemeLoad(pnUserGetTheme());
265 $all_categories = pnModAPIFunc(__POSTCALENDAR__,'admin','getCategories');
266 $output->Text('<form name="cats" method="post" action="'.pnModURL(__POSTCALENDAR__,'user','submit2', $args).'">');
267 $output->FormHidden('no_nav', $_GET['no_nav']);
268 $output->FormHidden('event_startampm', $_GET['event_startampm']);
269 $output->FormHidden('event_starttimeh', $_GET['event_starttimeh']);
270 $output->FormHidden('event_starttimem', $_GET['event_starttimem']);
271 $output->FormHidden('event_startmonth', $_GET['event_startmonth']);
272 $output->FormHidden('event_startday', $_GET['event_startday']);
273 $output->FormHidden('event_startyear', $_GET['event_startyear']);
274 $output->FormHidden('event_category', $_GET['event_category']);
275 $output->FormHidden('event_dur_minutes', $_GET['event_dur_minutes']);
276 $output->FormHidden('provider_id',$_GET['provider_id']);
277 $output->FormHidden('patient_id', $_GET['patient_id']);
278 $output->FormHidden('module', $_GET['module']);
279 $output->FormHidden('func', $_GET['func']);
280 $output->FormHidden('Date', $_GET['Date']);
281 $select = array();
283 foreach($all_categories as $cat)
285 array_push($select, array('name'=>$cat['name'],'id'=>base64_encode(serialize($cat))));
287 $output->Text('Select a Category');
288 $output->FormSelectMultiple('category', $select);
289 $output->FormSubmit();
290 return $output->GetOutput();
292 //return postcalendar_user_submit2($args);
295 function postcalendar_user_submit($args)
297 // We need at least ADD permission to submit an event
298 if (!(bool)PC_ACCESS_ADD) {
299 return _POSTCALENDARNOAUTH;
302 $output =& new pnHTML();
303 $output->SetInputMode(_PNH_VERBATIMINPUT);
306 // get the theme globals :: is there a better way to do this?
307 pnThemeLoad(pnUserGetTheme());
308 global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $textcolor1, $textcolor2;
310 // $category = pnVarCleanFromInput('event_category');
311 $category = pnVarCleanFromInput('category');
313 if(!empty($category))
315 $category = unserialize(base64_decode($category));
316 //print_r($category);
318 else
319 { //print_r($_POST);
320 $cat = $_POST['category'];
322 $category = unserialize(base64_decode($cat));
323 //print_r($category);
325 //print_r($category);
327 // echo("<!-- Here is the argument array: -->\n");
328 // foreach ($args as $tmpkey => $tmpval) { // debugging
329 // echo("<!-- $tmpkey => '$tmpval' -->\n");
330 // }
332 extract($args);
334 $Date =& postcalendar_getDate();
335 $year = substr($Date,0,4);
336 $month = substr($Date,4,2);
337 $day = substr($Date,6,2);
339 // basic event information
340 $event_desc = pnVarCleanFromInput('event_desc');
341 $event_category = pnVarCleanFromInput('event_category');
342 $event_subject = pnVarCleanFromInput('event_subject');
343 $event_sharing = pnVarCleanFromInput('event_sharing');
344 $event_topic = pnVarCleanFromInput('event_topic');
346 //id of the user the event is for
347 $event_userid = pnVarCleanFromInput('event_userid');
348 if (!is_numeric($event_userid))
349 $event_userid = 0;
350 $event_pid = pnVarCleanFromInput('event_pid');
352 if (!is_numeric($event_pid))
353 $event_pid = "";
355 // event start information
356 $event_startmonth = pnVarCleanFromInput('event_startmonth');
357 $event_startday = pnVarCleanFromInput('event_startday');
358 $event_startyear = pnVarCleanFromInput('event_startyear');
359 $event_starttimeh = pnVarCleanFromInput('event_starttimeh');
360 $event_starttimem = pnVarCleanFromInput('event_starttimem');
361 $event_startampm = pnVarCleanFromInput('event_startampm');
363 // location data
364 $event_location = pnVarCleanFromInput('event_location');
365 $event_street1 = pnVarCleanFromInput('event_street1');
366 $event_street2 = pnVarCleanFromInput('event_street2');
367 $event_city = pnVarCleanFromInput('event_city');
368 $event_state = pnVarCleanFromInput('event_state');
369 $event_postal = pnVarCleanFromInput('event_postal');
370 $event_location_info = serialize(compact('event_location', 'event_street1', 'event_street2',
371 'event_city', 'event_state', 'event_postal'));
372 // contact data
373 $event_contname = pnVarCleanFromInput('event_contname');
374 $event_conttel = pnVarCleanFromInput('event_conttel');
375 $event_contemail = pnVarCleanFromInput('event_contemail');
376 $event_website = pnVarCleanFromInput('event_website');
377 $event_fee = pnVarCleanFromInput('event_fee');
378 $event_patient_name = pnVarCleanFromInput('patient_name');
380 // event repeating data
381 if( is_array($category) )
383 //$event_subject =
384 $event_desc = $category['desc'];
385 $event_category = $category['id'];
387 $event_duration = $category['event_duration']; //seconds of the event
388 $event_dur_hours = $event_duration/(60 * 60); //seconds divided by 60 seconds * 60 minutes
389 $event_dur_minutes = ($event_duration%(60 * 60))/60;
390 $event_repeat = $category['event_repeat'];
391 $event_repeat_freq = $category['event_repeat_freq'];
392 $event_repeat_freq_type = $category['event_repeat_freq_type'];
393 $event_repeat_on_num = $category['event_repeat_on_num'];
394 $event_repeat_on_day = $category['event_repeat_on_day'];
395 $event_repeat_on_freq = $category['event_repeat_on_freq'];
396 $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
397 'event_repeat_on_day', 'event_repeat_on_freq'));
399 // event end information
400 $multiple = $category['end_date_freq']." ";
401 switch($category['end_date_type'])
403 case REPEAT_EVERY_DAY:
404 case REPEAT_EVERY_WORK_DAY: //end date is in days
405 $multiple .= "days";
406 break;
407 case REPEAT_EVERY_WEEK; //end date is in weeks
408 $multiple .= "weeks";
409 break;
410 case REPEAT_EVERY_MONTH; //end date is in months
411 $multiple .= "months";
412 break;
413 case REPEAT_EVERY_YEAR: //end date is in years
414 $multiple .= "years";
415 break;
418 $edate = strtotime(pnVarCleanFromInput('Date'));
419 $event_startmonth = date("m", $edate);
420 $event_startday = date("d", $edate);
421 $event_startyear = date("Y", $edate);
422 $event_enddate = strtotime(pnVarCleanFromInput('Date')." + ".$multiple);
423 $event_endmonth = date("m",$event_enddate);
424 $event_endday = date("d",$event_enddate);
425 $event_endyear = date("Y",$event_enddate);
426 $event_endtype = $category['end_date_flag'];
428 // I'm pretty sure this was a bug since 'event_all_day' appears nowhere
429 // else in the code, but it's hard to tell WTF is going on.
430 // $event_allday = $category['event_all_day'];
431 $event_allday = $category['all_day'];
433 else
435 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
436 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
437 $event_duration = (60*60*$event_dur_hours) + (60*$event_dur_minutes);
438 $event_repeat = pnVarCleanFromInput('event_repeat');
439 $event_repeat_freq = pnVarCleanFromInput('event_repeat_freq');
440 $event_repeat_freq_type = pnVarCleanFromInput('event_repeat_freq_type');
441 $event_repeat_on_num = pnVarCleanFromInput('event_repeat_on_num');
442 $event_repeat_on_day = pnVarCleanFromInput('event_repeat_on_day');
443 $event_repeat_on_freq = pnVarCleanFromInput('event_repeat_on_freq');
444 $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
445 'event_repeat_on_day', 'event_repeat_on_freq'));
447 // event end information
448 $event_endmonth = pnVarCleanFromInput('event_endmonth');
449 $event_endday = pnVarCleanFromInput('event_endday');
450 $event_endyear = pnVarCleanFromInput('event_endyear');
451 $event_endtype = pnVarCleanFromInput('event_endtype');
452 $event_allday = pnVarCleanFromInput('event_allday');
455 // Added by Rod:
456 if ($event_allday) {
457 $event_starttimeh = 0;
458 $event_starttimem = 0;
459 $event_startampm = 1;
460 $event_dur_hours = 24;
461 $event_dur_minutes = 0;
462 $event_duration = 60 * 60 * $event_dur_hours;
465 $form_action = pnVarCleanFromInput('form_action');
466 $pc_html_or_text = pnVarCleanFromInput('pc_html_or_text');
467 $pc_event_id = pnVarCleanFromInput('pc_event_id');
468 $data_loaded = pnVarCleanFromInput('data_loaded');
469 $is_update = pnVarCleanFromInput('is_update');
470 $authid = pnVarCleanFromInput('authid');
472 //pennfirm uname matchup future fix
473 //if(pnUserLoggedIn()) { $uname = pnUserGetVar('uname'); }
474 //else { $uname = pnConfigGetVar('anonymous'); }
475 $uname = $_SESSION['authUser'];
476 if(!isset($event_repeat)) { $event_repeat = 0; }
478 if(!isset($pc_event_id) || empty($pc_event_id) || $data_loaded) {
479 // lets wrap all the data into array for passing to submit and preview functions
480 $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
481 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
482 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
483 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
484 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
485 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
486 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',"event_userid","event_pid",
487 'Date','year','month','day','pc_html_or_text','event_patient_name','event_pid');
488 $eventdata['is_update'] = $is_update;
489 $eventdata['pc_event_id'] = $pc_event_id;
490 $eventdata['data_loaded'] = true;
491 $eventdata['category'] = base64_encode(serialize($category));
492 } else {
493 $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
495 //echo "uname is:$uname other name is: ".$event['uname'] . "<br />";
496 if($uname != $event['uname']) {
497 if (!validateGroupStatus($uname,getUsername($event['uname']))) {
498 return _PC_CAN_NOT_EDIT;
501 $eventdata['event_subject'] = $event['title'];
502 $eventdata['event_desc'] = $event['hometext'];
503 $eventdata['event_sharing'] = $event['sharing'];
504 $eventdata['event_category'] = $event['catid'];
505 $eventdata['event_topic'] = $event['topic'];
506 $eventdata['event_startmonth'] = substr($event['eventDate'],5,2);
507 $eventdata['event_startday'] = substr($event['eventDate'],8,2);
508 $eventdata['event_startyear'] = substr($event['eventDate'],0,4);
509 $eventdata['event_starttimeh'] = substr($event['startTime'],0,2);
510 $eventdata['event_starttimem'] = substr($event['startTime'],3,2);
511 $eventdata['event_startampm'] = $eventdata['event_starttimeh'] < 12 ? 1 : 2 ; //1 is am , 2 is pm
512 $eventdata['event_endmonth'] = substr($event['endDate'],5,2);
513 $eventdata['event_endday'] = substr($event['endDate'],8,2);
514 $eventdata['event_endyear'] = substr($event['endDate'],0,4);
515 $eventdata['event_endtype'] = $event['endDate'] == '0000-00-00' ? '0' : '1' ;
516 $eventdata['event_dur_hours'] = $event['duration_hours'];
517 $eventdata['event_dur_minutes'] = $event['duration_minutes'];
518 $eventdata['event_duration'] = $event['duration'];
519 $eventdata['event_allday'] = $event['alldayevent'];
520 $loc_data = unserialize($event['location']);
521 $eventdata['event_location'] = $loc_data['event_location'];
522 $eventdata['event_street1'] = $loc_data['event_street1'];
523 $eventdata['event_street2'] = $loc_data['event_street2'];
524 $eventdata['event_city'] = $loc_data['event_city'];
525 $eventdata['event_state'] = $loc_data['event_state'];
526 $eventdata['event_postal'] = $loc_data['event_postal'];
527 $eventdata['event_location_info'] = $loc_data;
528 $eventdata['event_contname'] = $event['contname'];
529 $eventdata['event_conttel'] = $event['conttel'];
530 $eventdata['event_contemail'] = $event['contemail'];
531 $eventdata['event_website'] = $event['website'];
532 $eventdata['event_fee'] = $event['fee'];
533 $eventdata['event_repeat'] = $event['recurrtype'];
534 $rspecs = unserialize($event['recurrspec']);
535 $eventdata['event_repeat_freq'] = $rspecs['event_repeat_freq'];
536 $eventdata['event_repeat_freq_type'] = $rspecs['event_repeat_freq_type'];
537 $eventdata['event_repeat_on_num'] = $rspecs['event_repeat_on_num'];
538 $eventdata['event_repeat_on_day'] = $rspecs['event_repeat_on_day'];
539 $eventdata['event_repeat_on_freq'] = $rspecs['event_repeat_on_freq'];
540 $eventdata['event_recurrspec'] = $rspecs;
541 $eventdata['uname'] = $uname;
542 $eventdata['event_userid'] = $event['event_userid'];
543 $eventdata['event_pid'] = $event['pid'];
544 $eventdata['event_aid'] = $event['aid'];
545 $eventdata['Date'] = $Date;
546 $eventdata['year'] = $year;
547 $eventdata['month'] = $month;
548 $eventdata['day'] = $day;
549 $eventdata['is_update'] = true;
550 $eventdata['pc_event_id'] = $pc_event_id;
551 $event_data['patient_name'] = $event_patient_name;
552 $eventdata['data_loaded'] = true;
553 $eventdata['pc_html_or_text'] = $pc_html_or_text;
554 $eventdata['category'] = base64_encode(serialize($category));
557 // lets get the module's information
558 $modinfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__));
559 $categories = pnModAPIFunc(__POSTCALENDAR__,'user','getCategories');
560 $output->tabindex=1;
562 //================================================================
563 // ERROR CHECKING
564 //================================================================
565 // removed event_desc as a required_var
567 $required_vars = array('event_subject');
568 $required_name = array(_PC_EVENT_TITLE,_PC_EVENT_DESC);
569 $error_msg = '';
570 $output->SetOutputMode(_PNH_RETURNOUTPUT);
571 $reqCount = count($required_vars);
572 //print_r($eventdata);
573 for ($r=0; $r<$reqCount; $r++) {
574 if(empty($$required_vars[$r]) || !preg_match('/\S/i',$$required_vars[$r])) {
575 $error_msg .= $output->Text('<b>'.$required_name[$r].'</b> '._PC_SUBMIT_ERROR4);
576 $error_msg .= $output->Linebreak();
579 unset($reqCount);
580 // check repeating frequencies
581 if($event_repeat == REPEAT) {
583 //can't have a repeating event that doesnt have an end date
584 if ($event_endtype == 0) {
585 $error_msg .= $output->Text("Repeating events must have an end date set.");
586 $error_msg .= $output->Linebreak();
588 if(!isset($event_repeat_freq) || $event_repeat_freq < 1 || empty($event_repeat_freq)) {
589 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
590 $error_msg .= $output->Linebreak();
591 } elseif(!is_numeric($event_repeat_freq)) {
592 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
593 $error_msg .= $output->Linebreak();
595 } elseif($event_repeat == REPEAT_ON) {
596 //can't have a repeating event that doesnt have an end date
597 if ($event_endtype == 0) {
598 $error_msg .= $output->Text("Repeating events must have an end date set.");
599 $error_msg .= $output->Linebreak();
601 if(!isset($event_repeat_on_freq) || $event_repeat_on_freq < 1 || empty($event_repeat_on_freq)) {
602 $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
603 $error_msg .= $output->Linebreak();
604 } elseif(!is_numeric($event_repeat_on_freq)) {
605 $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
606 $error_msg .= $output->Linebreak();
609 // check date validity
610 if(_SETTING_TIME_24HOUR) {
611 $startTime = $event_starttimeh.':'.$event_starttimem;
612 $endTime = $event_endtimeh.':'.$event_endtimem;
613 } else {
614 if($event_startampm == _AM_VAL) {
615 $event_starttimeh = $event_starttimeh == 12 ? '00' : $event_starttimeh;
616 } else {
617 $event_starttimeh = $event_starttimeh != 12 ? $event_starttimeh+=12 : $event_starttimeh;
619 $startTime = $event_starttimeh.':'.$event_starttimem;
621 $sdate = strtotime($event_startyear.'-'.$event_startmonth.'-'.$event_startday);
622 $edate = strtotime($event_endyear.'-'.$event_endmonth.'-'.$event_endday);
623 $tdate = strtotime(date('Y-m-d'));
624 if($edate < $sdate && $event_endtype == 1) {
625 $error_msg .= $output->Text(_PC_SUBMIT_ERROR1);
626 $error_msg .= $output->Linebreak();
628 if(!checkdate($event_startmonth,$event_startday,$event_startyear)) {
629 $error_msg .= $output->Text(_PC_SUBMIT_ERROR2 . " '$event_startyear-$event_startmonth-$event_startday'");
630 $error_msg .= $output->Linebreak();
632 if(!checkdate($event_endmonth,$event_endday,$event_endyear)) {
633 $error_msg .= $output->Text(_PC_SUBMIT_ERROR3 . " '$event_endyear-$event_endmonth-$event_endday'");
634 $error_msg .= $output->Linebreak();
637 //check limit on category
638 if(($ret = checkCategoryLimits($eventdata)) != null)
640 $error_msg .= $output->Text("This category has a limit of $ret[limit] between $ret[start] and $ret[end] which you have exceeded.");
641 $error_msg .= $output->Linebreak();
642 //$output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
643 //return $output->GetOutput();
645 //echo "fa: " . $form_action . " double_book: " . pnVarCleanFromInput("double_book") . " update: " . $eventdata['is_update'] . " em: " . $error_msg;
646 //event collision check
648 if($form_action == "commit" && pnVarCleanFromInput("double_book") != 1 && !$eventdata['is_update'] && empty($error_msg) ) {
649 //check on new shceduling events(in or out of office) to make sure that
650 //you don't have more than one set per day
651 //event category 1 is in office, event category 2 is out of office
653 if ($eventdata['event_category'] == 2 || $eventdata['event_category'] == 3) {
654 $searchargs = array();
655 $searchargs['start'] = $eventdata['event_startmonth'] . "/" . $eventdata['event_startday'] ."/". $eventdata['event_startyear'];
656 $searchargs['end'] = $eventdata['event_endmonth'] . "/" . $eventdata['event_endday'] ."/". $eventdata['event_endyear'];
657 $searchargs['provider_id'] = $eventdata['event_userid'];
659 //faFLag uses pcgeteventsfa, which can search on provider
660 $searchargs['faFlag'] = true;
661 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) ";
662 //print_r($searchargs);
664 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
665 $ekey = md5($event_data['subject'] . date("U") . rand(0,1000));
666 $oldstatus = $eventdata['event_status'];
667 $oldtitle = $eventdata['event_subject'];
668 $old_patient_name = $eventdata['patient_name'];
669 $old_dur_hours = $eventdata['event_dur_hours'];
670 $old_dur_min = $eventdata['event_dur_minutes'];
671 $old_duration = $eventdata['event_duration'];
672 $eventdata['event_subject'] = mysql_real_escape_string($ekey);
673 $eventdata['event_status'] = _EVENT_TEMPORARY;
675 if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
676 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
677 $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 />");
678 $error_msg .= $output->Text('</div></center>');
679 $error_msg .= $output->Linebreak();
680 $error_msg .= $output->Text($dbconn->ErrorMsg());
682 $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) AND a.pc_title = '" . $eventdata['event_subject'] . "' ";
683 $searchargs['event_status'] = _EVENT_TEMPORARY;
684 $submitEventByDate =& postcalendar_userapi_pcGetEvents($searchargs);
686 if(!delete_event($ekey)) {
687 $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
688 $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 />");
689 $error_msg .= $output->Text('</div></center>');
690 $error_msg .= $output->Linebreak();
691 $error_msg .= $output->Text($dbconn->ErrorMsg());
694 $eventdata['event_status'] = $oldstatus;
695 $eventdata['event_subject'] = $oldtitle;
696 $eventdata['patient_name '] = $old_patient_name;
697 $eventdata['event_dur_hours'] = $old_dur_hour;
698 $eventdata['event_dur_minutes'] = $old_dur_min;
700 foreach ($submitEventByDate as $date => $newevent) {
701 if (count($eventsByDate[$date]) > 0 && count($newevent) > 0) {
702 foreach ($eventsByDate[$date] as $con_event) {
703 if ($con_event['catid'] == $newevent[0]['catid']) {
704 $error_msg .= $output->Text('There is a conflict on ' . $date . ' with event ' . $con_event['title']);
705 $error_msg .= $output->Linebreak();
710 /*echo "<br /><br />";
711 print_r($eventsByDate);
712 echo "<br /><br />";
713 print_r($submitEventByDate);*/
716 $colls = checkEventCollision($eventdata);
717 if (count($colls) > 0) {
718 foreach ($colls as $coll) {
719 $error_msg .= $output->Text("Event Collides with: " . $coll['title'] . " at " . date("g:i a", strtotime($coll['startTime'])) . "<br />");
720 $error_msg .= $output->Linebreak();
722 $error_msg .= $output->Text("Submit again to \"Double Book\" <br />To change values click back in your browser.");
723 $error_msg .= $output->Linebreak();
724 // the following line will display "DOUBLE BOOKED" if when adding an event there is a collistion with anothe appointment
725 //$eventdata['event_subject'] = "DOUBLE BOOKED " . $eventdata['event_subject'];
726 $eventdata['double_book'] = 1;
730 $output->SetOutputMode(_PNH_KEEPOUTPUT);
731 if($form_action == 'preview') {
732 //================================================================
733 // Preview the event
734 //================================================================
735 // check authid
736 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
737 if(!empty($error_msg)) {
738 $preview = false;
739 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
740 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
741 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
742 $output->Linebreak();
743 $output->Text($error_msg);
744 $output->Text('</td></td></table>');
745 $output->Text('</td></td></table>');
746 $output->Linebreak(2);
747 } else {
748 $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventPreview',$eventdata));
749 $output->Linebreak();
751 } elseif($form_action == 'commit') {
753 //================================================================
754 // Enter the event into the DB
755 //================================================================
756 if (!empty($error_msg)) {
757 if (!pnSecConfirmAuthKey(true)) { return(_NO_DIRECT_ACCESS); }
759 else {
760 if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
762 if(!empty($error_msg)) {
763 $preview = false;
764 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
765 $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
766 $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
767 $output->Linebreak();
768 $output->Text($error_msg);
769 $output->Text('</td></td></table>');
770 $output->Text('</td></td></table>');
771 $output->Linebreak(2);
772 } else {
773 if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
774 $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
775 $output->Text("<b>"._PC_EVENT_SUBMISSION_FAILED."</b>");
776 $output->Text('</div></center>');
777 $output->Linebreak();
778 $output->Text($dbconn->ErrorMsg());
779 } else {
780 // clear the Smarty cache
781 $tpl =& new pcSmarty();
782 $tpl->clear_all_cache();
783 $output->Text('<center><div style="padding:5px; border:1px solid green; background-color: lightgreen;">');
784 if($is_update) {
785 $output->Text("<b>"._PC_EVENT_EDIT_SUCCESS."</b>");
786 } else {
787 $output->Text("<b>"._PC_EVENT_SUBMISSION_SUCCESS."</b>");
789 $output->Text('</div></center>');
790 $output->Linebreak();
791 // clear the form vars
792 $event_subject=$event_desc=$event_sharing=$event_category=$event_topic=
793 $event_startmonth=$event_startday=$event_startyear=$event_starttimeh=$event_starttimem=$event_startampm=
794 $event_endmonth=$event_endday=$event_endyear=$event_endtype=$event_dur_hours=$event_dur_minutes=
795 $event_duration=$event_allday=$event_location=$event_street1=$event_street2=$event_city=$event_state=
796 $event_postal=$event_location_info=$event_contname=$event_conttel=$event_contemail=
797 $event_website=$event_fee=$event_repeat=$event_repeat_freq=$event_repeat_freq_type=
798 $event_repeat_on_num=$event_repeat_on_day=$event_repeat_on_freq=$event_recurrspec=$uname=
799 $Date=$year=$month=$day=$pc_html_or_text=$event_patient_name=$evnet_pid=null;
800 $is_update = false;
801 $pc_event_id = 0;
803 //$_SESSION['category'] = "";
804 // lets wrap all the data into array for passing to submit and preview functions
805 $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
806 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
807 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
808 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
809 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
810 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
811 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',
812 'Date','year','month','day','pc_html_or_text','is_update','pc_event_id','event_patient_name');
813 //if no using the no_nav format then show form again after submit
814 if (pnVarCleanFromInput("no_nav") == 1) {
815 return $output->GetOutput();
821 $output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
822 return $output->GetOutput();
827 * search events
829 function postcalendar_user_search()
832 if (!(bool)PC_ACCESS_OVERVIEW) {
833 return _POSTCALENDARNOAUTH;
836 $tpl =& new pcSmarty();
837 $k = pnVarCleanFromInput('pc_keywords');
838 $k_andor = pnVarCleanFromInput('pc_keywords_andor');
839 $pc_category = pnVarCleanFromInput('pc_category');
840 $pc_topic = pnVarCleanFromInput('pc_topic');
841 $submit = pnVarCleanFromInput('submit');
842 $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
843 $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
845 $categories = postcalendar_userapi_getCategories();
846 $cat_options = '';
847 foreach($categories as $category) {
848 $cat_options .= "<option value=\"$category[id]\">$category[name]</option>";
850 $tpl->assign_by_ref('CATEGORY_OPTIONS',$cat_options);
851 $tpl->assign('event_dur_hours', $event_dur_hours);
852 $tpl->assign('event_dur_minutes', $event_dur_minutes);
854 $ProviderID = pnVarCleanFromInput("provider_id");
855 //echo "prov is: " . $ProviderID . "<br />";
856 if (is_numeric($ProviderID)) {
857 $tpl->assign('ProviderID', $ProviderID);;
859 else {
860 $tpl->assign('ProviderID', "");
862 $provinfo = getProviderInfo();
863 $tpl->assign('providers', $provinfo);
864 $PatientID = pnVarCleanFromInput("patient_id");
865 if (is_numeric($PatientID)) {
866 $tpl->assign('PatientList', getPatientPID($PatientID));
868 else {
869 $tpl->assign('PatientList', getPatientPID());
871 $event_endday = pnVarCleanFromInput("event_endday");
872 $event_endmonth = pnVarCleanFromInput("event_endmonth");
873 $event_endyear = pnVarCleanFromInput("event_endyear");
875 $event_startday = pnVarCleanFromInput("event_startday");
876 $event_startmonth = pnVarCleanFromInput("event_startmonth");
877 $event_startyear = pnVarCleanFromInput("event_startyear");
878 if($event_startday > $event_endday)
880 $event_endday = $event_startday;
882 if($event_startmonth > $event_endmonth)
884 $event_endmonth = $event_startmonth;
886 if($event_startyear > $event_endyear)
888 $event_endyear = $event_startyear;
890 $tpl->assign('patient_id', $PatientID);
891 $tpl->assign('provider_id', $ProviderID);
892 $tpl->assign("event_category", pnVarCleanFromInput("event_category"));
893 $tpl->assign("event_subject", pnVarCleanFromInput("event_subject"));
894 $output =& new pnHTML();
895 $output->SetOutputMode(_PNH_RETURNOUTPUT);
896 if(_SETTING_USE_INT_DATES) {
898 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
899 $formdata = $output->FormSelectMultiple('event_startday', $sel_data);
900 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
901 $formdata .= $output->FormSelectMultiple('event_startmonth', $sel_data);
902 } else {
903 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
904 $formdata = $output->FormSelectMultiple('event_startmonth', $sel_data);
905 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
906 $formdata .= $output->FormSelectMultiple('event_startday', $sel_data);
908 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_startyear));
909 $formdata .= $output->FormSelectMultiple('event_startyear', $sel_data);
910 $output->SetOutputMode(_PNH_KEEPOUTPUT);
911 $tpl->assign('SelectDateTimeStart', $formdata);
912 $output->SetOutputMode(_PNH_RETURNOUTPUT);
913 if(_SETTING_USE_INT_DATES) {
914 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday));
915 $formdata = $output->FormSelectMultiple('event_endday', $sel_data);
916 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
917 $formdata .= $output->FormSelectMultiple('event_endmonth', $sel_data);
918 } else {
919 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
920 $formdata = $output->FormSelectMultiple('event_endmonth', $sel_data);
921 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday ));
922 $formdata .= $output->FormSelectMultiple('event_endday', $sel_data);
924 $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_endyear));
925 $formdata .= $output->FormSelectMultiple('event_endyear', $sel_data);
926 $output->SetOutputMode(_PNH_KEEPOUTPUT);
927 $tpl->assign('SelectDateTimeEnd', $formdata);
928 $output = null;
929 if(_SETTING_DISPLAY_TOPICS) {
930 $topics = postcalendar_userapi_getTopics();
931 $top_options = '';
932 foreach($topics as $topic) {
933 $top_options .= "<option value=\"$topic[id]\">$topic[text]</option>";
935 $tpl->assign_by_ref('TOPIC_OPTIONS',$top_options);
937 //=================================================================
938 // Find out what Template we're using
939 //=================================================================
940 $template_name = _SETTING_TEMPLATE;
941 if(!isset($template_name)) {
942 $template_name = 'default';
944 //=================================================================
945 // Output the search form
946 //=================================================================
947 $tpl->assign('FORM_ACTION',pnModURL(__POSTCALENDAR__,'user','search'));
948 //=================================================================
949 // Perform the search if we have data
950 //=================================================================
951 if(!empty($submit) && strtolower($submit) == "find first") {
953 $searchargs = array();
954 $searchargs['start'] = pnVarCleanFromInput("event_startmonth") . "/" . pnVarCleanFromInput("event_startday") ."/". pnVarCleanFromInput("event_startyear");
955 $searchargs['end'] = pnVarCleanFromInput("event_endmonth") . "/" . pnVarCleanFromInput("event_endday") ."/". pnVarCleanFromInput("event_endyear");
956 $searchargs['provider_id'] = pnVarCleanFromInput("provider_id");
957 $searchargs['faFlag'] = true;
958 //print_r($searchargs);
959 //echo "<br />";
960 //set defaults to current week if empty
961 if ($searchargs['start'] == "//") {
962 $searchargs['start'] = date("m/d/Y");
964 if ($searchargs['end'] == "//") {
965 $searchargs['end'] = date("m/d/Y", strtotime("+7 Days", strtotime($searchargs['start'])));
967 //print_r($searchargs);
968 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
969 //print_r($eventsByDate);
970 $found = findFirstAvailable($eventsByDate);
971 $tpl->assign('available_times',$found);
972 //print_r($_POST);
974 $tpl->assign('SEARCH_PERFORMED',true);
975 $tpl->assign('A_EVENTS',$eventsByDate);
977 if(!empty($submit) && strtolower($submit) == "listapps") {
979 $searchargs = array();
980 $searchargs['start'] = date("m/d/Y");
981 $searchargs['end'] = date("m/d/Y",strtotime("+1 year",strtotime($searchargs['start'])));
982 $searchargs['patient_id'] = pnVarCleanFromInput("patient_id");
983 $searchargs['listappsFlag'] = true;
985 $sqlKeywords .= "(a.pc_pid = '" . pnVarCleanFromInput("patient_id") . "' )";
987 $searchargs['s_keywords'] = $sqlKeywords;
988 //print_r($searchargs);
989 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
990 //print_r($eventsByDate);
991 $tpl->assign('appointments',$eventsByDate);
992 //print_r($_POST);
994 $tpl->assign('SEARCH_PERFORMED',true);
995 $tpl->assign('A_EVENTS',$eventsByDate);
997 elseif(!empty($submit)) {
998 $sqlKeywords = '';
999 $keywords = explode(' ',$k);
1000 // build our search query
1001 foreach($keywords as $word) {
1002 if(!empty($sqlKeywords)) $sqlKeywords .= " $k_andor ";
1003 $sqlKeywords .= '(';
1004 $sqlKeywords .= "pd.lname LIKE '%$word%' OR ";
1005 $sqlKeywords .= "pd.fname LIKE '%$word%' OR ";
1006 $sqlKeywords .= "u.lname LIKE '%$word%' OR ";
1007 $sqlKeywords .= "u.fname LIKE '%$word%' OR ";
1008 $sqlKeywords .= "a.pc_title LIKE '%$word%' OR ";
1009 $sqlKeywords .= "a.pc_hometext LIKE '%$word%' OR ";
1010 $sqlKeywords .= "a.pc_location LIKE '%$word%'";
1011 $sqlKeywords .= ') ';
1015 if(!empty($pc_category)) {
1016 $s_category = "a.pc_catid = '$pc_category'";
1019 if(!empty($pc_topic)) {
1020 $s_topic = "a.pc_topic = '$pc_topic'";
1023 $searchargs = array();
1024 if(!empty($sqlKeywords)) $searchargs['s_keywords'] = $sqlKeywords;
1025 if(!empty($s_category)) $searchargs['s_category'] = $s_category;
1026 if(!empty($s_topic)) $searchargs['s_topic'] = $s_topic;
1027 $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
1028 //print_r($eventsByDate);
1029 $tpl->assign('SEARCH_PERFORMED',true);
1030 $tpl->assign('A_EVENTS',$eventsByDate);
1032 $tpl->caching = false;
1033 $tpl->assign('STYLE',$GLOBALS['style']);
1034 $pageSetup =& pnModAPIFunc(__POSTCALENDAR__,'user','pageSetup');
1035 if (pnVarCleanFromInput("no_nav") == 1) {
1036 $return = $pageSetup . $tpl->fetch($template_name.'/user/findfirst.html');
1038 elseif (pnVarCleanFromInput("no_nav") == 2) {
1039 $return = $pageSetup . $tpl->fetch($template_name.'/user/listapps.html');
1041 else {
1042 $return = $pageSetup . $tpl->fetch($template_name.'/user/search.html');
1044 return $return;
1047 function checkCategoryLimits($eventdata)
1049 extract($eventdata);
1050 //print_r($eventdata);
1051 //print "$event_starttimeh:$event_starttimem";
1053 $limits = & pnModAPIFunc(__POSTCALENDAR__,'user','getCategoryLimits');
1054 //print_r($limits);
1055 foreach($limits as $limit)
1057 if($limit['catid'] == $event_category) //have a limit
1059 //print_r($limit);
1060 $sdate = ($event_startmonth.'/'.$event_startday.'/'
1061 .$event_startyear);
1062 $edate = $sdate;
1063 $stime = date("H:i:00",strtotime($limit['startTime']));
1064 $etime = date("H:i:00",strtotime($limit['endTime']));
1065 if($is_update)
1067 $searchText = "a.pc_eid != '$pc_event_id' AND ";
1069 //echo "stime is: $stime, etime is: $etime sdate is: $sdate edate is: $edate<br />";
1070 $a = array('s_category' => " a.pc_catid = $event_category",'start'=>$edate,
1071 'end'=>$sdate, 'stime' => $stime, 'etime' => $etime,'providerID'=>$event_userid,
1072 's_keywords'=>$searchText."a.pc_starttime >= '$stime' AND a.pc_endtime <= '$etime'");
1073 $eventsByDate =& postcalendar_userapi_pcGetEvents($a);
1074 //print_r($eventsByDate);
1075 $ret = null;
1076 foreach ($eventsByDate as $day)
1078 //if event time falls within limit time check
1079 //hour from forms is 12 not 24 format, convert here
1080 if($event_startampm == 2 && $event_starttimeh != 12)
1081 $event_starttimeh += 12;
1082 elseif ($event_startampm == 1 && $event_starttimeh == 12)
1083 $event_starttimeh -= 12;
1084 $event_starttime = date("H:i:00",strtotime($event_starttimeh.":".$event_starttimem.":"."00"));
1085 $event_endtime = date("H:i:00",strtotime($event_endtimeh.":".$event_endtimem.":"."00"));
1087 if( $event_starttime >= $limit['startTime'])
1089 $numToday = count($day);
1091 if($numToday >= $limit['limit'])
1093 //reached limit
1094 $ret = array("start"=>$limit['startTime'],"end"=>$limit['endTime'],
1095 "limit"=>$limit['limit']);
1096 return $ret;
1098 }//if in limit time span
1103 return null;
1105 /*list($dbconn) = pnDBGetConn();
1106 $pntable = pnDBGetTables();
1107 $event_table = $pntable['postcalendar_events'];
1108 //get all of todays events
1109 $starting_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1110 $ending_date = date('m/d/Y',mktime(0,0,0,$the_month,$the_day,$the_year));
1111 //select all of the limits
1112 $limits = & pnModAPIFunc(__POSTCALENDAR__,'user','getCategoryLimits');
1113 //for each limit for this category id, make sure you won't exceed the limit
1114 foreach($limits as $limit)
1116 if(($key = array_search($eventdata['cat_id'])) != false)
1118 $sql = "SELECT count(pc_eid) from $event_table where "