PageRenderTime 68ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/interface/main/calendar/modules/PostCalendar/pnuser.php

https://bitbucket.org/DenizYldrm/openemr
PHP | 1204 lines | 882 code | 113 blank | 209 comment | 200 complexity | 861a9edde4ef004732ec8754978a63c2 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, MPL-2.0, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. @define('__POSTCALENDAR__','PostCalendar');
  3. /**
  4. * $Id$
  5. *
  6. * PostCalendar::PostNuke Events Calendar Module
  7. * Copyright (C) 2002 The PostCalendar Team
  8. * http://postcalendar.tv
  9. *
  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.
  14. *
  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.
  19. *
  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
  23. *
  24. * To read the license please read the docs/license.txt or visit
  25. * http://www.gnu.org/copyleft/gpl.html
  26. *
  27. */
  28. //=========================================================================
  29. // Load the API Functions and Language defines
  30. //=========================================================================
  31. pnModAPILoad(__POSTCALENDAR__,'user');
  32. // Added to improve security and standardization of input data to be used in
  33. // database insertion.
  34. require_once($GLOBALS['srcdir']."/formdata.inc.php");
  35. //=========================================================================
  36. // start the main postcalendar application
  37. //=========================================================================
  38. function postcalendar_user_main()
  39. {
  40. // 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));
  45. }
  46. /**
  47. * view items
  48. * This is a standard function to provide an overview of all of the items
  49. * available from the module.
  50. */
  51. function postcalendar_user_view()
  52. {
  53. if (!pnSecAuthAction(0, 'PostCalendar::', '::', ACCESS_OVERVIEW)) { return _POSTCALENDARNOAUTH; }
  54. // get the vars that were passed in
  55. list($Date,
  56. $print,
  57. $viewtype,
  58. $jumpday,
  59. $jumpmonth,
  60. $jumpyear) = pnVarCleanFromInput('Date',
  61. 'print',
  62. 'viewtype',
  63. 'jumpday',
  64. 'jumpmonth',
  65. 'jumpyear');
  66. $Date =& postcalendar_getDate();
  67. if(!isset($viewtype)) $viewtype = _SETTING_DEFAULT_VIEW;
  68. // added to allow the view & providers to remain as the user last saw it -- JRM
  69. if ($_SESSION['viewtype']) $viewtype = $_SESSION['viewtype'];
  70. if ($_SESSION['pc_username']) $pc_username = $_SESSION['pc_username'];
  71. return postcalendar_user_display(array('viewtype'=>$viewtype,'Date'=>$Date,'print'=>$print)) . postcalendar_footer();
  72. }
  73. /**
  74. * display item
  75. * This is a standard function to provide detailed information on a single item
  76. * available from the module.
  77. */
  78. function postcalendar_user_display($args)
  79. {
  80. list($eid, $viewtype, $tplview,
  81. $pc_username, $Date, $print, $category, $topic, $pc_facility) = pnVarCleanFromInput('eid', 'viewtype', 'tplview',
  82. 'pc_username', 'Date', 'print', 'pc_category', 'pc_topic', 'pc_facility');
  83. // added to allow the view & providers to remain as the user last saw it -- JRM
  84. if ($_SESSION['viewtype']) $viewtype = $_SESSION['viewtype'];
  85. if ($_SESSION['pc_username']) $pc_username = $_SESSION['pc_username'];
  86. // funky things happen if the view is 'details' and we don't have an event ID
  87. // so in such a case, we're going to revert to the 'day' view -- JRM
  88. if ($viewtype == 'details' && (!isset($eid) || $eid == "")) {
  89. $_SESSION['viewtype'] = 'day';
  90. $viewtype = $_SESSION['viewtype'];
  91. }
  92. extract($args);
  93. if(empty($Date) && empty($viewtype)) { return false; }
  94. if(empty($tplview)) $tplview = 'default';
  95. $uid = pnUserGetVar('uid');
  96. $theme = pnUserGetTheme();
  97. //$cacheid = md5($Date.$viewtype.$tplview._SETTING_TEMPLATE.$eid.$print.$uid.'u'.$pc_username.$theme.'c'.$category.'t'.$topic);
  98. $cacheid = md5(strtotime("now"));
  99. switch ($viewtype)
  100. {
  101. case 'details':
  102. if (!(bool)PC_ACCESS_READ) { return _POSTCALENDARNOAUTH; }
  103. $event = pnModAPIFunc('PostCalendar','user','eventDetail',array('eid'=>$eid,
  104. 'Date'=>$Date,
  105. 'print'=>$print,
  106. 'cacheid'=>$cacheid));
  107. if($event === false) {
  108. pnRedirect(pnModURL(__POSTCALENDAR__,'user'));
  109. }
  110. $out = "\n\n<!-- START user_display -->\n\n";
  111. $out .= $event;
  112. $out .= "\n\n<!-- END user_display -->\n\n";
  113. break;
  114. default :
  115. if (!(bool)PC_ACCESS_OVERVIEW) {
  116. return _POSTCALENDARNOAUTH;
  117. }
  118. $out = "\n\n<!-- START user_display -->\n\n";
  119. $out .= pnModAPIFunc('PostCalendar','user','buildView',array('Date'=>$Date,
  120. 'viewtype'=>$viewtype,
  121. 'cacheid'=>$cacheid));
  122. $out .= "\n\n<!-- END user_display -->\n\n";
  123. break;
  124. }
  125. // Return the output that has been generated by this function
  126. return $out;
  127. }
  128. function postcalendar_user_delete()
  129. {
  130. if(!(bool)PC_ACCESS_ADD) {
  131. return _POSTCALENDAR_NOAUTH;
  132. }
  133. $output = new pnHTML();
  134. $output->SetInputMode(_PNH_VERBATIMINPUT);
  135. $uname = $_SESSION['authUser'];
  136. list($action,$pc_event_id) = pnVarCleanFromInput('action','pc_event_id');
  137. $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
  138. if($uname != $event['uname']) {
  139. if (!validateGroupStatus($uname,getUsername($event['uname']))) {
  140. return _PC_CAN_NOT_DELETE;
  141. }
  142. }
  143. //if($uname != $event['uname']) {
  144. // return _PC_CAN_NOT_DELETE;
  145. //}
  146. unset($event);
  147. $output->FormStart(pnModUrl(__POSTCALENDAR__,'user','deleteevents'));
  148. $output->FormHidden('pc_eid',$pc_event_id);
  149. $output->Text(_PC_DELETE_ARE_YOU_SURE.' ');
  150. $output->FormSubmit(_PC_ADMIN_YES);
  151. $output->FormEnd();
  152. $output->Linebreak(2);
  153. $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventDetail',array('eid'=>$pc_event_id,'cacheid'=>'','print'=>0,'Date'=>'')));
  154. $output->Linebreak(2);
  155. return $output->GetOutput();
  156. }
  157. function postcalendar_user_deleteevents()
  158. {
  159. if(!(bool)PC_ACCESS_ADD) {
  160. return _POSTCALENDAR_NOAUTH;
  161. }
  162. $pc_eid = pnVarCleanFromInput('pc_eid');
  163. $event =& postcalendar_userapi_pcGetEventDetails($pc_eid);
  164. $uname = $_SESSION['authUser'];
  165. if($uname != $event['uname']) {
  166. if (!validateGroupStatus($uname,getUsername($event['uname']))) {
  167. return _PC_CAN_NOT_DELETE;
  168. }
  169. }
  170. unset($event);
  171. $output = new pnHTML();
  172. $output->SetInputMode(_PNH_VERBATIMINPUT);
  173. list($dbconn) = pnDBGetConn();
  174. $pntable = pnDBGetTables();
  175. $events_table = $pntable['postcalendar_events'];
  176. $events_column = &$pntable['postcalendar_events_column'];
  177. //hipaa doesn't allow for actual deletes, so just change to inactive
  178. //$sql = "DELETE FROM $events_table WHERE $events_column[eid] = '$pc_eid'";
  179. $sql = "UPDATE $events_table SET pc_eventstatus = 0 WHERE $events_column[eid] = '$pc_eid'";
  180. $dbconn->Execute($sql);
  181. $tpl = new pcSmarty();
  182. $template_name = _SETTING_TEMPLATE;
  183. if(!isset($template_name)) {
  184. $template_name = 'default';
  185. }
  186. $tpl->assign('STYLE',$GLOBALS['style']);
  187. $output->Text($tpl->fetch($template_name . "/views/header.html"));
  188. $output->Text($tpl->fetch($template_name . "/views/global/navigation.html"));
  189. $output->Text("<br /><br />");
  190. if ($dbconn->ErrorNo() != 0) {
  191. $output->Text(_PC_ADMIN_EVENT_ERROR);
  192. } else {
  193. $output->Text(_PC_ADMIN_EVENTS_DELETED);
  194. }
  195. $output->Text($tpl->fetch($template_name . "/views/footer.html"));
  196. // clear the template cache
  197. $tpl->clear_all_cache();
  198. return $output->GetOutput();
  199. }
  200. //this function is only used by the system to delete temp events used in certain
  201. //collision calculations
  202. function delete_event($title)
  203. {
  204. list($dbconn) = pnDBGetConn();
  205. $pntable = pnDBGetTables();
  206. $events_table = $pntable['postcalendar_events'];
  207. $events_column = &$pntable['postcalendar_events_column'];
  208. //this function is only used by the system to delete temp events used in certain
  209. //collision calculations
  210. $sql = "DELETE FROM $events_table WHERE pc_eventstatus = " ._EVENT_TEMPORARY ." AND pc_title = '$title'";
  211. $dbconn->Execute($sql);
  212. if ($dbconn->ErrorNo() != 0) {
  213. return 0;
  214. } else {
  215. return 1;
  216. }
  217. }
  218. /**
  219. * submit an event
  220. */
  221. function postcalendar_user_edit($args) {return postcalendar_user_submit($args); }
  222. function postcalendar_user_submit2($args)
  223. {
  224. if (!(bool)PC_ACCESS_ADD) {
  225. return _POSTCALENDARNOAUTH;
  226. }
  227. extract($args);
  228. //print_r($_GET);
  229. $category = pnVarCleanFromInput('event_category');
  230. //print_r($category);
  231. print "dble is ".pnVarCleanFromInput('double_book')." data_loaded is ".pnVarCleanFromInput('data_loaded');
  232. //print_r($_POST);
  233. if(pnVarCleanFromInput('data_loaded') || !empty($category)) //submitting
  234. {
  235. return postcalendar_user_submit2($agrs);
  236. }
  237. else
  238. {
  239. //select the category you wish to add,
  240. //using the info from that category we can populate some data
  241. $output = new pnHTML();
  242. $output->SetInputMode(_PNH_VERBATIMINPUT);
  243. $output->Text('<body bgcolor="'.$GLOBALS['style']['BGCOLOR2'].'"></body>');
  244. // get the theme globals :: is there a better way to do this?
  245. pnThemeLoad(pnUserGetTheme());
  246. $all_categories = pnModAPIFunc(__POSTCALENDAR__,'admin','getCategories');
  247. $output->Text('<form name="cats" method="post" action="'.pnModURL(__POSTCALENDAR__,'user','submit2', $args).'">');
  248. $output->FormHidden('no_nav', $_GET['no_nav']);
  249. $output->FormHidden('event_startampm', $_GET['event_startampm']);
  250. $output->FormHidden('event_starttimeh', $_GET['event_starttimeh']);
  251. $output->FormHidden('event_starttimem', $_GET['event_starttimem']);
  252. $output->FormHidden('event_startmonth', $_GET['event_startmonth']);
  253. $output->FormHidden('event_startday', $_GET['event_startday']);
  254. $output->FormHidden('event_startyear', $_GET['event_startyear']);
  255. $output->FormHidden('event_category', $_GET['event_category']);
  256. $output->FormHidden('event_dur_minutes', $_GET['event_dur_minutes']);
  257. $output->FormHidden('provider_id',$_GET['provider_id']);
  258. $output->FormHidden('patient_id', $_GET['patient_id']);
  259. $output->FormHidden('module', $_GET['module']);
  260. $output->FormHidden('func', $_GET['func']);
  261. $output->FormHidden('Date', $_GET['Date']);
  262. $select = array();
  263. foreach($all_categories as $cat)
  264. {
  265. array_push($select, array('name'=>$cat['name'],'id'=>base64_encode(serialize($cat))));
  266. }
  267. $output->Text('Select a Category');
  268. $output->FormSelectMultiple('category', $select);
  269. $output->FormSubmit();
  270. return $output->GetOutput();
  271. }
  272. //return postcalendar_user_submit2($args);
  273. }
  274. function postcalendar_user_submit($args)
  275. {
  276. // We need at least ADD permission to submit an event
  277. if (!(bool)PC_ACCESS_ADD) {
  278. return _POSTCALENDARNOAUTH;
  279. }
  280. $output = new pnHTML();
  281. $output->SetInputMode(_PNH_VERBATIMINPUT);
  282. // get the theme globals :: is there a better way to do this?
  283. pnThemeLoad(pnUserGetTheme());
  284. global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $textcolor1, $textcolor2;
  285. // $category = pnVarCleanFromInput('event_category');
  286. $category = pnVarCleanFromInput('category');
  287. if(!empty($category))
  288. {
  289. $category = unserialize(base64_decode($category));
  290. //print_r($category);
  291. }
  292. else
  293. { //print_r($_POST);
  294. $cat = $_POST['category'];
  295. $category = unserialize(base64_decode($cat));
  296. //print_r($category);
  297. }
  298. //print_r($category);
  299. // echo("<!-- Here is the argument array: -->\n");
  300. // foreach ($args as $tmpkey => $tmpval) { // debugging
  301. // echo("<!-- $tmpkey => '$tmpval' -->\n");
  302. // }
  303. extract($args);
  304. $Date =& postcalendar_getDate();
  305. $year = substr($Date,0,4);
  306. $month = substr($Date,4,2);
  307. $day = substr($Date,6,2);
  308. // basic event information
  309. $event_desc = pnVarCleanFromInput('event_desc');
  310. $event_category = pnVarCleanFromInput('event_category');
  311. $event_subject = pnVarCleanFromInput('event_subject');
  312. $event_sharing = pnVarCleanFromInput('event_sharing');
  313. $event_topic = pnVarCleanFromInput('event_topic');
  314. //id of the user the event is for
  315. $event_userid = pnVarCleanFromInput('event_userid');
  316. if (!is_numeric($event_userid))
  317. $event_userid = 0;
  318. $event_pid = pnVarCleanFromInput('event_pid');
  319. if (!is_numeric($event_pid))
  320. $event_pid = "";
  321. // event start information
  322. $event_startmonth = pnVarCleanFromInput('event_startmonth');
  323. $event_startday = pnVarCleanFromInput('event_startday');
  324. $event_startyear = pnVarCleanFromInput('event_startyear');
  325. $event_starttimeh = pnVarCleanFromInput('event_starttimeh');
  326. $event_starttimem = pnVarCleanFromInput('event_starttimem');
  327. $event_startampm = pnVarCleanFromInput('event_startampm');
  328. // location data
  329. $event_location = pnVarCleanFromInput('event_location');
  330. $event_street1 = pnVarCleanFromInput('event_street1');
  331. $event_street2 = pnVarCleanFromInput('event_street2');
  332. $event_city = pnVarCleanFromInput('event_city');
  333. $event_state = pnVarCleanFromInput('event_state');
  334. $event_postal = pnVarCleanFromInput('event_postal');
  335. $event_location_info = serialize(compact('event_location', 'event_street1', 'event_street2',
  336. 'event_city', 'event_state', 'event_postal'));
  337. // contact data
  338. $event_contname = pnVarCleanFromInput('event_contname');
  339. $event_conttel = pnVarCleanFromInput('event_conttel');
  340. $event_contemail = pnVarCleanFromInput('event_contemail');
  341. $event_website = pnVarCleanFromInput('event_website');
  342. $event_fee = pnVarCleanFromInput('event_fee');
  343. $event_patient_name = pnVarCleanFromInput('patient_name');
  344. // event repeating data
  345. if( is_array($category) )
  346. {
  347. //$event_subject =
  348. $event_desc = $category['desc'];
  349. $event_category = $category['id'];
  350. $event_duration = $category['event_duration']; //seconds of the event
  351. $event_dur_hours = $event_duration/(60 * 60); //seconds divided by 60 seconds * 60 minutes
  352. $event_dur_minutes = ($event_duration%(60 * 60))/60;
  353. $event_repeat = $category['event_repeat'];
  354. $event_repeat_freq = $category['event_repeat_freq'];
  355. $event_repeat_freq_type = $category['event_repeat_freq_type'];
  356. $event_repeat_on_num = $category['event_repeat_on_num'];
  357. $event_repeat_on_day = $category['event_repeat_on_day'];
  358. $event_repeat_on_freq = $category['event_repeat_on_freq'];
  359. $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
  360. 'event_repeat_on_day', 'event_repeat_on_freq'));
  361. // event end information
  362. $multiple = $category['end_date_freq']." ";
  363. switch($category['end_date_type'])
  364. {
  365. case REPEAT_EVERY_DAY:
  366. case REPEAT_EVERY_WORK_DAY: //end date is in days
  367. $multiple .= "days";
  368. break;
  369. case REPEAT_EVERY_WEEK; //end date is in weeks
  370. $multiple .= "weeks";
  371. break;
  372. case REPEAT_EVERY_MONTH; //end date is in months
  373. $multiple .= "months";
  374. break;
  375. case REPEAT_EVERY_YEAR: //end date is in years
  376. $multiple .= "years";
  377. break;
  378. }
  379. $edate = strtotime(pnVarCleanFromInput('Date'));
  380. $event_startmonth = date("m", $edate);
  381. $event_startday = date("d", $edate);
  382. $event_startyear = date("Y", $edate);
  383. $event_enddate = strtotime(pnVarCleanFromInput('Date')." + ".$multiple);
  384. $event_endmonth = date("m",$event_enddate);
  385. $event_endday = date("d",$event_enddate);
  386. $event_endyear = date("Y",$event_enddate);
  387. $event_endtype = $category['end_date_flag'];
  388. // I'm pretty sure this was a bug since 'event_all_day' appears nowhere
  389. // else in the code, but it's hard to tell WTF is going on.
  390. // $event_allday = $category['event_all_day'];
  391. $event_allday = $category['all_day'];
  392. }
  393. else
  394. {
  395. $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
  396. $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
  397. $event_duration = (60*60*$event_dur_hours) + (60*$event_dur_minutes);
  398. $event_repeat = pnVarCleanFromInput('event_repeat');
  399. $event_repeat_freq = pnVarCleanFromInput('event_repeat_freq');
  400. $event_repeat_freq_type = pnVarCleanFromInput('event_repeat_freq_type');
  401. $event_repeat_on_num = pnVarCleanFromInput('event_repeat_on_num');
  402. $event_repeat_on_day = pnVarCleanFromInput('event_repeat_on_day');
  403. $event_repeat_on_freq = pnVarCleanFromInput('event_repeat_on_freq');
  404. $event_recurrspec = serialize(compact('event_repeat_freq', 'event_repeat_freq_type', 'event_repeat_on_num',
  405. 'event_repeat_on_day', 'event_repeat_on_freq'));
  406. // event end information
  407. $event_endmonth = pnVarCleanFromInput('event_endmonth');
  408. $event_endday = pnVarCleanFromInput('event_endday');
  409. $event_endyear = pnVarCleanFromInput('event_endyear');
  410. $event_endtype = pnVarCleanFromInput('event_endtype');
  411. $event_allday = pnVarCleanFromInput('event_allday');
  412. }
  413. // Added by Rod:
  414. if ($event_allday) {
  415. $event_starttimeh = 0;
  416. $event_starttimem = 0;
  417. $event_startampm = 1;
  418. $event_dur_hours = 24;
  419. $event_dur_minutes = 0;
  420. $event_duration = 60 * 60 * $event_dur_hours;
  421. }
  422. $form_action = pnVarCleanFromInput('form_action');
  423. $pc_html_or_text = pnVarCleanFromInput('pc_html_or_text');
  424. $pc_event_id = pnVarCleanFromInput('pc_event_id');
  425. $data_loaded = pnVarCleanFromInput('data_loaded');
  426. $is_update = pnVarCleanFromInput('is_update');
  427. $authid = pnVarCleanFromInput('authid');
  428. //pennfirm uname matchup future fix
  429. //if(pnUserLoggedIn()) { $uname = pnUserGetVar('uname'); }
  430. //else { $uname = pnConfigGetVar('anonymous'); }
  431. $uname = $_SESSION['authUser'];
  432. if(!isset($event_repeat)) { $event_repeat = 0; }
  433. if(!isset($pc_event_id) || empty($pc_event_id) || $data_loaded) {
  434. // lets wrap all the data into array for passing to submit and preview functions
  435. $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
  436. 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
  437. 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
  438. 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
  439. 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
  440. 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
  441. 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',"event_userid","event_pid",
  442. 'Date','year','month','day','pc_html_or_text','event_patient_name','event_pid');
  443. $eventdata['is_update'] = $is_update;
  444. $eventdata['pc_event_id'] = $pc_event_id;
  445. $eventdata['data_loaded'] = true;
  446. $eventdata['category'] = base64_encode(serialize($category));
  447. } else {
  448. $event =& postcalendar_userapi_pcGetEventDetails($pc_event_id);
  449. //echo "uname is:$uname other name is: ".$event['uname'] . "<br />";
  450. if($uname != $event['uname']) {
  451. if (!validateGroupStatus($uname,getUsername($event['uname']))) {
  452. return _PC_CAN_NOT_EDIT;
  453. }
  454. }
  455. $eventdata['event_subject'] = $event['title'];
  456. $eventdata['event_desc'] = $event['hometext'];
  457. $eventdata['event_sharing'] = $event['sharing'];
  458. $eventdata['event_category'] = $event['catid'];
  459. $eventdata['event_topic'] = $event['topic'];
  460. $eventdata['event_startmonth'] = substr($event['eventDate'],5,2);
  461. $eventdata['event_startday'] = substr($event['eventDate'],8,2);
  462. $eventdata['event_startyear'] = substr($event['eventDate'],0,4);
  463. $eventdata['event_starttimeh'] = substr($event['startTime'],0,2);
  464. $eventdata['event_starttimem'] = substr($event['startTime'],3,2);
  465. $eventdata['event_startampm'] = $eventdata['event_starttimeh'] < 12 ? 1 : 2 ; //1 is am , 2 is pm
  466. $eventdata['event_endmonth'] = substr($event['endDate'],5,2);
  467. $eventdata['event_endday'] = substr($event['endDate'],8,2);
  468. $eventdata['event_endyear'] = substr($event['endDate'],0,4);
  469. $eventdata['event_endtype'] = $event['endDate'] == '0000-00-00' ? '0' : '1' ;
  470. $eventdata['event_dur_hours'] = $event['duration_hours'];
  471. $eventdata['event_dur_minutes'] = $event['duration_minutes'];
  472. $eventdata['event_duration'] = $event['duration'];
  473. $eventdata['event_allday'] = $event['alldayevent'];
  474. $loc_data = unserialize($event['location']);
  475. $eventdata['event_location'] = $loc_data['event_location'];
  476. $eventdata['event_street1'] = $loc_data['event_street1'];
  477. $eventdata['event_street2'] = $loc_data['event_street2'];
  478. $eventdata['event_city'] = $loc_data['event_city'];
  479. $eventdata['event_state'] = $loc_data['event_state'];
  480. $eventdata['event_postal'] = $loc_data['event_postal'];
  481. $eventdata['event_location_info'] = $loc_data;
  482. $eventdata['event_contname'] = $event['contname'];
  483. $eventdata['event_conttel'] = $event['conttel'];
  484. $eventdata['event_contemail'] = $event['contemail'];
  485. $eventdata['event_website'] = $event['website'];
  486. $eventdata['event_fee'] = $event['fee'];
  487. $eventdata['event_repeat'] = $event['recurrtype'];
  488. $rspecs = unserialize($event['recurrspec']);
  489. $eventdata['event_repeat_freq'] = $rspecs['event_repeat_freq'];
  490. $eventdata['event_repeat_freq_type'] = $rspecs['event_repeat_freq_type'];
  491. $eventdata['event_repeat_on_num'] = $rspecs['event_repeat_on_num'];
  492. $eventdata['event_repeat_on_day'] = $rspecs['event_repeat_on_day'];
  493. $eventdata['event_repeat_on_freq'] = $rspecs['event_repeat_on_freq'];
  494. $eventdata['event_recurrspec'] = $rspecs;
  495. $eventdata['uname'] = $uname;
  496. $eventdata['event_userid'] = $event['event_userid'];
  497. $eventdata['event_pid'] = $event['pid'];
  498. $eventdata['event_aid'] = $event['aid'];
  499. $eventdata['Date'] = $Date;
  500. $eventdata['year'] = $year;
  501. $eventdata['month'] = $month;
  502. $eventdata['day'] = $day;
  503. $eventdata['is_update'] = true;
  504. $eventdata['pc_event_id'] = $pc_event_id;
  505. $event_data['patient_name'] = $event_patient_name;
  506. $eventdata['data_loaded'] = true;
  507. $eventdata['pc_html_or_text'] = $pc_html_or_text;
  508. $eventdata['category'] = base64_encode(serialize($category));
  509. }
  510. // lets get the module's information
  511. $modinfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__));
  512. $categories = pnModAPIFunc(__POSTCALENDAR__,'user','getCategories');
  513. $output->tabindex=1;
  514. //================================================================
  515. // ERROR CHECKING
  516. //================================================================
  517. // removed event_desc as a required_var
  518. $required_vars = array('event_subject');
  519. $required_name = array(_PC_EVENT_TITLE,_PC_EVENT_DESC);
  520. $error_msg = '';
  521. $output->SetOutputMode(_PNH_RETURNOUTPUT);
  522. $reqCount = count($required_vars);
  523. //print_r($eventdata);
  524. for ($r=0; $r<$reqCount; $r++) {
  525. if(empty($$required_vars[$r]) || !preg_match('/\S/i',$$required_vars[$r])) {
  526. $error_msg .= $output->Text('<b>'.$required_name[$r].'</b> '._PC_SUBMIT_ERROR4);
  527. $error_msg .= $output->Linebreak();
  528. }
  529. }
  530. unset($reqCount);
  531. // check repeating frequencies
  532. if($event_repeat == REPEAT) {
  533. //can't have a repeating event that doesnt have an end date
  534. if ($event_endtype == 0) {
  535. $error_msg .= $output->Text("Repeating events must have an end date set.");
  536. $error_msg .= $output->Linebreak();
  537. }
  538. if(!isset($event_repeat_freq) || $event_repeat_freq < 1 || empty($event_repeat_freq)) {
  539. $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
  540. $error_msg .= $output->Linebreak();
  541. } elseif(!is_numeric($event_repeat_freq)) {
  542. $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
  543. $error_msg .= $output->Linebreak();
  544. }
  545. } elseif($event_repeat == REPEAT_ON) {
  546. //can't have a repeating event that doesnt have an end date
  547. if ($event_endtype == 0) {
  548. $error_msg .= $output->Text("Repeating events must have an end date set.");
  549. $error_msg .= $output->Linebreak();
  550. }
  551. if(!isset($event_repeat_on_freq) || $event_repeat_on_freq < 1 || empty($event_repeat_on_freq)) {
  552. $error_msg .= $output->Text(_PC_SUBMIT_ERROR5);
  553. $error_msg .= $output->Linebreak();
  554. } elseif(!is_numeric($event_repeat_on_freq)) {
  555. $error_msg .= $output->Text(_PC_SUBMIT_ERROR6);
  556. $error_msg .= $output->Linebreak();
  557. }
  558. }
  559. // check date validity
  560. if(_SETTING_TIME_24HOUR) {
  561. $startTime = $event_starttimeh.':'.$event_starttimem;
  562. $endTime = $event_endtimeh.':'.$event_endtimem;
  563. } else {
  564. if($event_startampm == _AM_VAL) {
  565. $event_starttimeh = $event_starttimeh == 12 ? '00' : $event_starttimeh;
  566. } else {
  567. $event_starttimeh = $event_starttimeh != 12 ? $event_starttimeh+=12 : $event_starttimeh;
  568. }
  569. $startTime = $event_starttimeh.':'.$event_starttimem;
  570. }
  571. $sdate = strtotime($event_startyear.'-'.$event_startmonth.'-'.$event_startday);
  572. $edate = strtotime($event_endyear.'-'.$event_endmonth.'-'.$event_endday);
  573. $tdate = strtotime(date('Y-m-d'));
  574. if($edate < $sdate && $event_endtype == 1) {
  575. $error_msg .= $output->Text(_PC_SUBMIT_ERROR1);
  576. $error_msg .= $output->Linebreak();
  577. }
  578. if(!checkdate($event_startmonth,$event_startday,$event_startyear)) {
  579. $error_msg .= $output->Text(_PC_SUBMIT_ERROR2 . " '$event_startyear-$event_startmonth-$event_startday'");
  580. $error_msg .= $output->Linebreak();
  581. }
  582. if(!checkdate($event_endmonth,$event_endday,$event_endyear)) {
  583. $error_msg .= $output->Text(_PC_SUBMIT_ERROR3 . " '$event_endyear-$event_endmonth-$event_endday'");
  584. $error_msg .= $output->Linebreak();
  585. }
  586. //check limit on category
  587. if(($ret = checkCategoryLimits($eventdata)) != null)
  588. {
  589. $error_msg .= $output->Text("This category has a limit of $ret[limit] between $ret[start] and $ret[end] which you have exceeded.");
  590. $error_msg .= $output->Linebreak();
  591. //$output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
  592. //return $output->GetOutput();
  593. }
  594. //echo "fa: " . $form_action . " double_book: " . pnVarCleanFromInput("double_book") . " update: " . $eventdata['is_update'] . " em: " . $error_msg;
  595. //event collision check
  596. if($form_action == "commit" && pnVarCleanFromInput("double_book") != 1 && !$eventdata['is_update'] && empty($error_msg) ) {
  597. //check on new shceduling events(in or out of office) to make sure that
  598. //you don't have more than one set per day
  599. //event category 1 is in office, event category 2 is out of office
  600. if ($eventdata['event_category'] == 2 || $eventdata['event_category'] == 3) {
  601. $searchargs = array();
  602. $searchargs['start'] = $eventdata['event_startmonth'] . "/" . $eventdata['event_startday'] ."/". $eventdata['event_startyear'];
  603. $searchargs['end'] = $eventdata['event_endmonth'] . "/" . $eventdata['event_endday'] ."/". $eventdata['event_endyear'];
  604. $searchargs['provider_id'] = $eventdata['event_userid'];
  605. //faFLag uses pcgeteventsfa, which can search on provider
  606. $searchargs['faFlag'] = true;
  607. $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) ";
  608. //print_r($searchargs);
  609. $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
  610. $ekey = md5($event_data['subject'] . date("U") . rand(0,1000));
  611. $oldstatus = $eventdata['event_status'];
  612. $oldtitle = $eventdata['event_subject'];
  613. $old_patient_name = $eventdata['patient_name'];
  614. $old_dur_hours = $eventdata['event_dur_hours'];
  615. $old_dur_min = $eventdata['event_dur_minutes'];
  616. $old_duration = $eventdata['event_duration'];
  617. $eventdata['event_subject'] = mysql_real_escape_string($ekey);
  618. $eventdata['event_status'] = _EVENT_TEMPORARY;
  619. if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
  620. $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
  621. $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 />");
  622. $error_msg .= $output->Text('</div></center>');
  623. $error_msg .= $output->Linebreak();
  624. $error_msg .= $output->Text($dbconn->ErrorMsg());
  625. }
  626. $searchargs['s_keywords'] = " (a.pc_catid = 2 OR a.pc_catid = 3) AND a.pc_title = '" . $eventdata['event_subject'] . "' ";
  627. $searchargs['event_status'] = _EVENT_TEMPORARY;
  628. $submitEventByDate =& postcalendar_userapi_pcGetEvents($searchargs);
  629. if(!delete_event($ekey)) {
  630. $error_msg .= $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
  631. $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 />");
  632. $error_msg .= $output->Text('</div></center>');
  633. $error_msg .= $output->Linebreak();
  634. $error_msg .= $output->Text($dbconn->ErrorMsg());
  635. }
  636. $eventdata['event_status'] = $oldstatus;
  637. $eventdata['event_subject'] = $oldtitle;
  638. $eventdata['patient_name '] = $old_patient_name;
  639. $eventdata['event_dur_hours'] = $old_dur_hour;
  640. $eventdata['event_dur_minutes'] = $old_dur_min;
  641. foreach ($submitEventByDate as $date => $newevent) {
  642. if (count($eventsByDate[$date]) > 0 && count($newevent) > 0) {
  643. foreach ($eventsByDate[$date] as $con_event) {
  644. if ($con_event['catid'] == $newevent[0]['catid']) {
  645. $error_msg .= $output->Text('There is a conflict on ' . $date . ' with event ' . $con_event['title']);
  646. $error_msg .= $output->Linebreak();
  647. }
  648. }
  649. }
  650. }
  651. /*echo "<br /><br />";
  652. print_r($eventsByDate);
  653. echo "<br /><br />";
  654. print_r($submitEventByDate);*/
  655. }
  656. $colls = checkEventCollision($eventdata);
  657. if (count($colls) > 0) {
  658. foreach ($colls as $coll) {
  659. $error_msg .= $output->Text("Event Collides with: " . $coll['title'] . " at " . date("g:i a", strtotime($coll['startTime'])) . "<br />");
  660. $error_msg .= $output->Linebreak();
  661. }
  662. $error_msg .= $output->Text("Submit again to \"Double Book\" <br />To change values click back in your browser.");
  663. $error_msg .= $output->Linebreak();
  664. // the following line will display "DOUBLE BOOKED" if when adding an event there is a collistion with anothe appointment
  665. //$eventdata['event_subject'] = "DOUBLE BOOKED " . $eventdata['event_subject'];
  666. $eventdata['double_book'] = 1;
  667. }
  668. }
  669. $output->SetOutputMode(_PNH_KEEPOUTPUT);
  670. if($form_action == 'preview') {
  671. //================================================================
  672. // Preview the event
  673. //================================================================
  674. // check authid
  675. if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
  676. if(!empty($error_msg)) {
  677. $preview = false;
  678. $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
  679. $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
  680. $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
  681. $output->Linebreak();
  682. $output->Text($error_msg);
  683. $output->Text('</td></td></table>');
  684. $output->Text('</td></td></table>');
  685. $output->Linebreak(2);
  686. } else {
  687. $output->Text(pnModAPIFunc(__POSTCALENDAR__,'user','eventPreview',$eventdata));
  688. $output->Linebreak();
  689. }
  690. } elseif($form_action == 'commit') {
  691. //================================================================
  692. // Enter the event into the DB
  693. //================================================================
  694. if (!empty($error_msg)) {
  695. if (!pnSecConfirmAuthKey(true)) { return(_NO_DIRECT_ACCESS); }
  696. }
  697. else {
  698. if (!pnSecConfirmAuthKey()) { return(_NO_DIRECT_ACCESS); }
  699. }
  700. if(!empty($error_msg)) {
  701. $preview = false;
  702. $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="red">');
  703. $output->Text('<table border="0" width="100%" cellpadding="1" cellspacing="0"><tr><td bgcolor="pink">');
  704. $output->Text('<center><b>'._PC_SUBMIT_ERROR.'</b></center>');
  705. $output->Linebreak();
  706. $output->Text($error_msg);
  707. $output->Text('</td></td></table>');
  708. $output->Text('</td></td></table>');
  709. $output->Linebreak(2);
  710. } else {
  711. if (!pnModAPIFunc(__POSTCALENDAR__,'user','submitEvent',$eventdata)) {
  712. $output->Text('<center><div style="padding:5px; border:1px solid red; background-color: pink;">');
  713. $output->Text("<b>"._PC_EVENT_SUBMISSION_FAILED."</b>");
  714. $output->Text('</div></center>');
  715. $output->Linebreak();
  716. $output->Text($dbconn->ErrorMsg());
  717. } else {
  718. // clear the Smarty cache
  719. $tpl = new pcSmarty();
  720. $tpl->clear_all_cache();
  721. $output->Text('<center><div style="padding:5px; border:1px solid green; background-color: lightgreen;">');
  722. if($is_update) {
  723. $output->Text("<b>"._PC_EVENT_EDIT_SUCCESS."</b>");
  724. } else {
  725. $output->Text("<b>"._PC_EVENT_SUBMISSION_SUCCESS."</b>");
  726. }
  727. $output->Text('</div></center>');
  728. $output->Linebreak();
  729. // clear the form vars
  730. $event_subject=$event_desc=$event_sharing=$event_category=$event_topic=
  731. $event_startmonth=$event_startday=$event_startyear=$event_starttimeh=$event_starttimem=$event_startampm=
  732. $event_endmonth=$event_endday=$event_endyear=$event_endtype=$event_dur_hours=$event_dur_minutes=
  733. $event_duration=$event_allday=$event_location=$event_street1=$event_street2=$event_city=$event_state=
  734. $event_postal=$event_location_info=$event_contname=$event_conttel=$event_contemail=
  735. $event_website=$event_fee=$event_repeat=$event_repeat_freq=$event_repeat_freq_type=
  736. $event_repeat_on_num=$event_repeat_on_day=$event_repeat_on_freq=$event_recurrspec=$uname=
  737. $Date=$year=$month=$day=$pc_html_or_text=$event_patient_name=$evnet_pid=null;
  738. $is_update = false;
  739. $pc_event_id = 0;
  740. //$_SESSION['category'] = "";
  741. // lets wrap all the data into array for passing to submit and preview functions
  742. $eventdata = compact('event_subject','event_desc','event_sharing','event_category','event_topic',
  743. 'event_startmonth','event_startday','event_startyear','event_starttimeh','event_starttimem','event_startampm',
  744. 'event_endmonth','event_endday','event_endyear','event_endtype','event_dur_hours','event_dur_minutes',
  745. 'event_duration','event_allday','event_location','event_street1','event_street2','event_city','event_state',
  746. 'event_postal','event_location_info','event_contname','event_conttel','event_contemail',
  747. 'event_website','event_fee','event_repeat','event_repeat_freq','event_repeat_freq_type',
  748. 'event_repeat_on_num','event_repeat_on_day','event_repeat_on_freq','event_recurrspec','uname',
  749. 'Date','year','month','day','pc_html_or_text','is_update','pc_event_id','event_patient_name');
  750. //if no using the no_nav format then show form again after submit
  751. if (pnVarCleanFromInput("no_nav") == 1) {
  752. return $output->GetOutput();
  753. }
  754. }
  755. }
  756. }
  757. $output->Text(pnModAPIFunc('PostCalendar','user','buildSubmitForm',$eventdata));
  758. return $output->GetOutput();
  759. }
  760. /**
  761. * search events
  762. */
  763. function postcalendar_user_search()
  764. {
  765. if (!(bool)PC_ACCESS_OVERVIEW) { return _POSTCALENDARNOAUTH; }
  766. $tpl = new pcSmarty();
  767. $k = formData("pc_keywords","R"); //from library/formdata.inc.php
  768. $k_andor = pnVarCleanFromInput('pc_keywords_andor');
  769. $pc_category = pnVarCleanFromInput('pc_category');
  770. $pc_facility = pnVarCleanFromInput('pc_facility');
  771. $pc_topic = pnVarCleanFromInput('pc_topic');
  772. $submit = pnVarCleanFromInput('submit');
  773. $event_dur_hours = pnVarCleanFromInput('event_dur_hours');
  774. $event_dur_minutes = pnVarCleanFromInput('event_dur_minutes');
  775. $start = pnVarCleanFromInput('start');
  776. $end = pnVarCleanFromInput('end');
  777. // get list of categories for the user to choose from
  778. $categories = postcalendar_userapi_getCategories();
  779. $cat_options = '';
  780. foreach($categories as $category) {
  781. $selected = "";
  782. if ($pc_category == $category[id]) { $selected = " SELECTED "; }
  783. //modified 8/09 by BM to allow translation if applicable
  784. $cat_options .= "<option value=\"$category[id]\" $selected>" . xl_appt_category($category[name]) . "</option>";
  785. }
  786. $tpl->assign_by_ref('CATEGORY_OPTIONS',$cat_options);
  787. $tpl->assign('event_dur_hours', $event_dur_hours);
  788. $tpl->assign('event_dur_minutes', $event_dur_minutes);
  789. // create default start and end dates for the search form
  790. if (isset($start) && $start != "") $tpl->assign('DATE_START', $start);
  791. else $tpl->assign('DATE_START', date("m/d/Y"));
  792. if (isset($end) && $end!= "") $tpl->assign('DATE_END', $end);
  793. else $tpl->assign('DATE_END', date("m/d/Y", strtotime("+7 Days", time())));
  794. // then override the setting if we have a value from the submitted form
  795. $ProviderID = pnVarCleanFromInput("provider_id");
  796. if (is_numeric($ProviderID)) { $tpl->assign('ProviderID', $ProviderID);; }
  797. elseif ($ProviderID == "_ALL_") { } // do nothing
  798. else { $tpl->assign('ProviderID', ""); }
  799. $provinfo = getProviderInfo();
  800. $tpl->assign('providers', $provinfo);
  801. // build a list of provider-options for the select box on the input form -- JRM
  802. $provider_options = "<option value='_ALL_' ";
  803. if ($ProviderID == "_ALL_") { $provider_options .= " SELECTED "; }
  804. $provider_options .= ">" . xl('All Providers') . "</option>";
  805. foreach ($provinfo as $provider) {
  806. $selected = "";
  807. // if we don't have a ProviderID chosen, pick the first one from the
  808. // pc_username Session variable
  809. if ($ProviderID == "") {
  810. // that variable stores the 'username' and not the numeric 'id'
  811. if ($_SESSION['pc_username'][0] == $provider['username']) {
  812. $selected = " SELECTED ";
  813. }
  814. }
  815. else if ($ProviderID == $provider['id']) { $selected = " SELECTED "; }
  816. $provider_options .= "<option value=\"".$provider['id']."\" ".$selected.">";
  817. $provider_options .= $provider['lname'].", ".$provider['fname']."</option>";
  818. }
  819. $tpl->assign_by_ref('PROVIDER_OPTIONS',$provider_options);
  820. // build a list of facility options for the select box on the input form -- JRM
  821. $facilities = getFacilities();
  822. $fac_options = "<option value=''>" . xl('All Facilities') . "</option>";
  823. foreach ($facilities as $facility) {
  824. $selected = "";
  825. if ($facility['id'] == $pc_facility) $selected = " SELECTED ";
  826. $fac_options .= "<option value=\"".$facility['id']."\" ".$selected.">";
  827. $fac_options .= $facility['name']."</option>";
  828. }
  829. $tpl->assign_by_ref('FACILITY_OPTIONS',$fac_options);
  830. $PatientID = pnVarCleanFromInput("patient_id");
  831. // limit the number of results returned by getPatientPID
  832. // this helps to prevent the server from stalling on a request with
  833. // no PID and thousands of PIDs in the database -- JRM
  834. // the function getPatientPID($pid, $given, $orderby, $limit, $start) <-- defined in library/patient.inc
  835. $plistlimit = 500;
  836. if (is_numeric($PatientID)) {
  837. $tpl->assign('PatientList', getPatientPID(array('pid'=>$PatientID, 'limit'=>$plistlimit)));
  838. }
  839. else {
  840. $tpl->assign('PatientList', getPatientPID(array('limit' =>$plistlimit)));
  841. }
  842. $event_endday = pnVarCleanFromInput("event_endday");
  843. $event_endmonth = pnVarCleanFromInput("event_endmonth");
  844. $event_endyear = pnVarCleanFromInput("event_endyear");
  845. $event_startday = pnVarCleanFromInput("event_startday");
  846. $event_startmonth = pnVarCleanFromInput("event_startmonth");
  847. $event_startyear = pnVarCleanFromInput("event_startyear");
  848. if($event_startday > $event_endday) { $event_endday = $event_startday; }
  849. if($event_startmonth > $event_endmonth) { $event_endmonth = $event_startmonth; }
  850. if($event_startyear > $event_endyear) { $event_endyear = $event_startyear; }
  851. $tpl->assign('patient_id', $PatientID);
  852. $tpl->assign('provider_id', $ProviderID);
  853. $tpl->assign("event_category", pnVarCleanFromInput("event_category"));
  854. $tpl->assign("event_subject", pnVarCleanFromInput("event_subject"));
  855. $output = new pnHTML();
  856. $output->SetOutputMode(_PNH_RETURNOUTPUT);
  857. if(_SETTING_USE_INT_DATES) {
  858. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
  859. $formdata = $output->FormSelectMultiple('event_startday', $sel_data);
  860. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
  861. $formdata .= $output->FormSelectMultiple('event_startmonth', $sel_data);
  862. } else {
  863. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_startmonth));
  864. $formdata = $output->FormSelectMultiple('event_startmonth', $sel_data);
  865. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_startday));
  866. $formdata .= $output->FormSelectMultiple('event_startday', $sel_data);
  867. }
  868. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_startyear));
  869. $formdata .= $output->FormSelectMultiple('event_startyear', $sel_data);
  870. $output->SetOutputMode(_PNH_KEEPOUTPUT);
  871. $tpl->assign('SelectDateTimeStart', $formdata);
  872. $output->SetOutputMode(_PNH_RETURNOUTPUT);
  873. if(_SETTING_USE_INT_DATES) {
  874. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday));
  875. $formdata = $output->FormSelectMultiple('event_endday', $sel_data);
  876. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
  877. $formdata .= $output->FormSelectMultiple('event_endmonth', $sel_data);
  878. } else {
  879. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildMonthSelect',array('pc_month'=>$month,'selected'=>$event_endmonth));
  880. $formdata = $output->FormSelectMultiple('event_endmonth', $sel_data);
  881. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildDaySelect',array('pc_day'=>$day,'selected'=>$event_endday ));
  882. $formdata .= $output->FormSelectMultiple('event_endday', $sel_data);
  883. }
  884. $sel_data = pnModAPIFunc(__POSTCALENDAR__,'user','buildYearSelect',array('pc_year'=>$year,'selected'=>$event_endyear));
  885. $formdata .= $output->FormSelectMultiple('event_endyear', $sel_data);
  886. $output->SetOutputMode(_PNH_KEEPOUTPUT);
  887. $tpl->assign('SelectDateTimeEnd', $formdata);
  888. $output = null;
  889. if(_SETTING_DISPLAY_TOPICS) {
  890. $topics = postcalendar_userapi_getTopics();
  891. $top_options = '';
  892. foreach($topics as $topic) {
  893. $top_options .= "<option value=\"$topic[id]\">$topic[text]</option>";
  894. }
  895. $tpl->assign_by_ref('TOPIC_OPTIONS',$top_options);
  896. }
  897. //=================================================================
  898. // Find out what Template we're using
  899. //=================================================================
  900. $template_name = _SETTING_TEMPLATE;
  901. if(!isset($template_name)) {
  902. $template_name = 'default';
  903. }
  904. //=================================================================
  905. // Output the search form
  906. //=================================================================
  907. $tpl->assign('FORM_ACTION',pnModURL(__POSTCALENDAR__,'user','search'));
  908. //=================================================================
  909. // Perform the search if we have data
  910. //=================================================================
  911. if(!empty($submit) && strtolower($submit) == "find first") {
  912. // not sure how we get here...
  913. $searchargs = array();
  914. $searchargs['start'] = pnVarCleanFromInput("event_startmonth") . "/" . pnVarCleanFromInput("event_startday") ."/". pnVarCleanFromInput("event_startyear");
  915. $searchargs['end'] = pnVarCleanFromInput("event_endmonth") . "/" . pnVarCleanFromInput("event_endday") ."/". pnVarCleanFromInput("event_endyear");
  916. $searchargs['provider_id'] = pnVarCleanFromInput("provider_id");
  917. $searchargs['faFlag'] = true;
  918. //print_r($searchargs);
  919. //echo "<br />";
  920. //set defaults to current week if empty
  921. if ($searchargs['start'] == "//") {
  922. $searchargs['start'] = date("m/d/Y");
  923. }
  924. if ($searchargs['end'] == "//") {
  925. $searchargs['end'] = date("m/d/Y", strtotime("+7 Days", strtotime($searchargs['start'])));
  926. }
  927. //print_r($searchargs);
  928. $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
  929. //print_r($eventsByDate);
  930. $found = findFirstAvailable($eventsByDate);
  931. $tpl->assign('available_times',$found);
  932. //print_r($_POST);
  933. $tpl->assign('SEARCH_PERFORMED',true);
  934. $tpl->assign('A_EVENTS',$eventsByDate);
  935. }
  936. if(!empty($submit) && strtolower($submit) == "listapps") {
  937. // not sure how we get here...
  938. $searchargs = array();
  939. $searchargs['start'] = date("m/d/Y");
  940. $searchargs['end'] = date("m/d/Y",strtotime("+1 year",strtotime($searchargs['start'])));
  941. $searchargs['patient_id'] = pnVarCleanFromInput("patient_id");
  942. $searchargs['listappsFlag'] = true;
  943. $sqlKeywords .= "(a.pc_pid = '" . pnVarCleanFromInput("patient_id") . "' )";
  944. $searchargs['s_keywords'] = $sqlKeywords;
  945. //print_r($searchargs);
  946. $eventsByDate =& postcalendar_userapi_pcGetEvents($searchargs);
  947. //print_r($eventsByDate);
  948. $tpl->assign('appointments',$eventsByDate);
  949. //print_r($_POST);
  950. $tpl->assign('SEARCH_PERFORMED',true);
  951. $

Large files files are truncated, but you can click here to view the full file