index.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:49k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: index.php,v $
  15. // | $Date: 2004/02/10 01:34:25 $
  16. // | $Revision: 1.157 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Calendar viewer.
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. // start file
  23. require("./../global.php");
  24. tech_nav('calendar');
  25. if ($_REQUEST['do'] == 'added') {
  26. alert('Task added');
  27. unset($_REQUEST['do']);
  28. }
  29. // defaults
  30. $_REQUEST['do'] = trim($_REQUEST['do']);
  31. if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
  32. $_REQUEST['do'] = "monthly";
  33. }
  34. $_REQUEST['type'] = trim($_REQUEST['type']);
  35. if (!isset($_REQUEST['type']) or $_REQUEST['type'] == "") {
  36. $_REQUEST['type'] = "calendar";
  37. }
  38. // globalise variables
  39. $global = array (
  40. array('year'),
  41. array('day'),
  42. array('month'),
  43. array('week')
  44. );
  45. rg($global);
  46. require_once(INCLUDE_PATH . 'functions/calendar_functions.php');
  47. #####################################################################################
  48.   ############################### SEARCH SETUP ###############################
  49. #####################################################################################
  50. if (isset($_REQUEST['search'])) {
  51. if ($_REQUEST['search'] == 'upcoming') { 
  52. // Set up a search for all unfinished tasks within a reasonable timeframe
  53. $startdate = '1970-01-01'; 
  54. $enddate = date('Y-m-d', strtotime(date('Y-m-d') . " + 1 month")); // Go a month out in the future
  55. $complete = 0;
  56. $search = 'upcoming';
  57. } else {
  58. // Perform a normal search
  59. if ($_REQUEST['ystartdate'] OR $_REQUEST['mstartdate'] OR $_REQUEST['dstartdate']) {
  60. $startdate = formatymd($_REQUEST['ystartdate'].'-'.$_REQUEST['mstartdate'].'-'.$_REQUEST['dstartdate']); 
  61. }
  62. if ($_REQUEST['yenddate'] OR $_REQUEST['menddate'] OR $_REQUEST['denddate']) {
  63. $enddate = formatymd($_REQUEST['yenddate'].'-'.$_REQUEST['menddate'].'-'.$_REQUEST['denddate']); 
  64. }
  65. $search = 1;
  66. }
  67. // Force the monthly list view for the search since that's where the search logic is
  68. $_REQUEST['do'] = 'monthly';
  69. $_REQUEST['type'] = 'list';
  70. }
  71. #####################################################################################
  72.   ############################### QUICK ADD ENTRY ###############################
  73. #####################################################################################
  74. if ($_REQUEST['addentry'] == '1') {
  75. $date = $_REQUEST['ydate'] . '-' . $_REQUEST['mdate'] . '-' . $_REQUEST['ddate'];
  76. if (trim($_REQUEST['title']) == '') {
  77. $error .= 'The title was left empty\n';
  78. }
  79. if (trim($_REQUEST['description']) == '') {
  80. $error .= 'The description was left empty\n';
  81. }
  82. if ($_REQUEST['title'] == 'Title ...') {
  83. $error .= 'Please specify a title.\n';
  84. }
  85. if ($_REQUEST['description'] == 'Message ...') {
  86. $error .= 'Please specify a description/message.\n';
  87. }
  88. $date = formatymd($date); // needs month day year
  89. $tmp = split('-', $date);
  90. if (!@checkdate($tmp[1], $tmp[2], $tmp[0])) {
  91. $error .= 'The date entered was not valid\n';
  92. }
  93. // Add record if no errors. We do *not* e-mail reminders here, because
  94. // the quick form only adds scheduled entries for the technician
  95. // submitting the form.
  96. if (!$error) {
  97.     $checks = xss_check(array($_REQUEST['title'], $_REQUEST['description']), 'tech');
  98. $db->query("INSERT INTO calendar_task SET
  99. title = '" . mysql_escape_string($checks[0]) . "',
  100. description = '" . mysql_escape_string($checks[1]) . "',
  101. repeattype = '0',
  102. techmaker = '$user[id]',
  103. startdate = '$date',
  104. enddate = '$date',
  105. timezone = '$settings[timezone]',
  106. weekstart = '$user[weekstart]'
  107. ");
  108. $id = $db->last_id();
  109. $db->query("INSERT INTO calendar_task_tech SET
  110. eventid = '$id',
  111. techid = '$user[id]'
  112. ");
  113. alert('Task Added');
  114. } else {
  115. alert($error);
  116. }
  117. }
  118. #####################################################################################
  119. ############################### TOGGLE AND DELETE ##############################
  120. #####################################################################################
  121. // There's lots of different types of events, and we have to handle them all
  122. // here, so each 'ids' entry is itself an array of two required elements, and
  123. // an optional one, separated by "|" characters, as in:
  124. //
  125. // 1234|2003-04-19|2
  126. //
  127. // This entry refers to a reminder to look at ticket 1234 on April 19, 2003.
  128. //
  129. // 4321|2003-05-13
  130. //
  131. // This entry refers to a normal scheduled event (or a repeat iteration). If
  132. // event 4321 is repeating and the date specified here isn't the item's start
  133. // date, this entry refers to the repeat iteration, not the parent event.
  134. // If it *does* match, this refers to the parent event, or to an event with
  135. // no repeat options.
  136. if (isset($_REQUEST['Process'])) {
  137. // Sort out event IDs and dates
  138. if (is_array($_REQUEST['ids'])) {
  139. foreach ($_REQUEST['ids'] as $key => $var) {
  140. $key = explode('|', $key);
  141. if ($key[2]) { // It's a ticket watch event, not a normal one
  142. $watches[$key[0]][] = $key[1];
  143. } else {
  144. $events[$key[0]][] = $key[1];
  145. }
  146. }
  147. }
  148. if (is_array($events)) {
  149. $ids = array2sql(array_keys($events));
  150. }
  151. if (!$ids) {
  152. $ids = "('')";
  153. }
  154. if (is_array($watches)) {
  155. $watches = array2sql(array_keys($watches));
  156. }
  157. if ($_REQUEST['action']) { // Delete or stop repeating today
  158. // We only want to let the user delete items he's created himself.
  159. $db->query("SELECT id FROM calendar_task WHERE id IN $ids AND techmaker = '$user[id]'");
  160. $ids = array();
  161. while($row = $db->row_array()) {
  162. $ids[] = $row[0];
  163. }
  164. $ids = array2sql($ids);
  165. if ($_REQUEST['action'] == 2) { // Stop repeating, set due today
  166. // We only want to update repeating items here; don't mess with normal items
  167. $db->query("UPDATE calendar_task SET enddate = now() WHERE id IN $ids AND repeattype");
  168. alert("Repetition stopped.");
  169. } else {
  170. $db->query("DELETE FROM calendar_task WHERE id IN $ids");
  171. $db->query("DELETE FROM calendar_task_tech WHERE eventid IN $ids");
  172. $db->query("DELETE FROM calendar_task_iteration WHERE taskid IN $ids");
  173. if ($watches) {
  174. $db->query("DELETE FROM tech_ticket_watch WHERE ticketid IN $watches AND techid = '$user[id]'");
  175. }
  176. alert("Item(s) deleted.");
  177. }
  178. } else { // Toggle
  179. if (is_array($events)) {
  180. foreach($events as $key => $val) {
  181. foreach($val as $key2 => $val2) {
  182. $db->query("SELECT techmaker, title, description, notifycompletion, multistaff, repeattype FROM calendar_task WHERE id = '$key'");
  183. $res = $db->row_array();
  184. $maker = $res['techmaker'];
  185. $title = $res['title'];
  186. $descr = $res['description'];
  187. $notify = $res['notifycompletion'];
  188. $staff = $res['multistaff'];
  189. $repeat = $res['repeattype'];
  190. $db->query('SELECT id, username, email FROM tech WHERE id = '' . mysql_escape_string($maker) . "' or id = '$user[id]'");
  191. while ($result = $db->row_array()) {
  192. $emails[$result['id']]['username']  = $result['username'];
  193. $emails[$result['id']]['email']  = $result['email'];
  194. }
  195. if ($staff OR $repeat) { // If multistaff, we have to update the iterations table
  196. $row = $db->query_return("SELECT taskid, completed 
  197. FROM calendar_task_iteration 
  198. WHERE taskid = '$key'
  199. AND task_techid = '$user[id]'
  200. AND date = '$val2'"
  201. );
  202. if ($db->num_rows()) { // Toggling an existing record
  203. $db->query("UPDATE calendar_task_iteration 
  204. SET completed = !completed
  205. WHERE taskid = '$key' 
  206. AND task_techid = '$user[id]'
  207. AND date = '$val2'"
  208. );
  209. $db->query("SELECT completed 
  210. FROM calendar_task_iteration
  211. WHERE taskid = '$key' 
  212. AND task_techid = '$user[id]' AND 
  213. date = '$val2'"
  214. );
  215. $res = $db->row_array();
  216. $done = $res['completed'];
  217. } else { // Marking completed, no existing iteration record
  218. $db->query("INSERT INTO calendar_task_iteration 
  219. (task_techid, taskid, completed, date) 
  220. VALUES ('$user[id]', '$key', '1', '$val2')"
  221. );
  222. $done = 1;
  223. }
  224. } else { // Otherwise, update the tech table
  225. $db->query("SELECT eventid, completed 
  226. FROM calendar_task_tech 
  227. WHERE eventid = '$key'
  228. AND techid = '$user[id]'"
  229. );
  230. if ($db->num_rows()) {
  231. $row = $db->row_array();
  232. $db->query("UPDATE calendar_task_tech 
  233. SET completed = !completed
  234. WHERE eventid = '$key' 
  235. AND techid = '$user[id]'"
  236. );
  237. $done = $row['completed'];
  238. }
  239. }
  240. if (($maker != $user[id]) && $notify) { // If the owner wants notifications and the owner isn't making this update, start sending mail
  241. if ($done) {
  242. $done = "complete";
  243. } else {
  244. $done = "incomplete";
  245. }
  246. $taskusername = $emails[$user['id']]['username'];
  247. $taskurl = $settings['helpdesk_url'] . "/tech/calendar/viewtask.php?id=$id";
  248. $tasktitle = htmlspecialchars($title);
  249. $taskdescription = htmlspecialchars($descr);
  250. $taskdone = $done;
  251. eval(makeemaileval('message', 'TECHBODY_task_toggled', $subject));
  252. dp_mail($emails[$maker][email], $subject, $message);
  253. }
  254. }
  255. }
  256. }
  257. if ($watches) {
  258. $db->query("UPDATE tech_ticket_watch SET completed = !completed WHERE id IN $watches AND techid = '$user[id]'");
  259. }
  260. alert("Item(s) toggled.");
  261. }
  262. }
  263. #####################################################################################
  264. ############################### USEFUL VARIABLES ###############################
  265. #####################################################################################
  266. // we are getting some useful variables that will be used for display
  267. // incoming dateform
  268. if ($_REQUEST['ddate']) {
  269. $day = ($_REQUEST['ddate']);
  270. }
  271. if ($_REQUEST['mdate']) {
  272. $month = ($_REQUEST['mdate']);
  273. }
  274. if ($_REQUEST['ydate']) {
  275. $year = ($_REQUEST['ydate']);
  276. }
  277. // arrays of dates
  278. $month_array = array(
  279. '1' => 'Jan', 
  280. '2' => 'Feb', 
  281. '3' => 'Mar', 
  282. '4' => 'Apr', 
  283. '5' => 'May', 
  284. '6' => 'Jun', 
  285. '7' => 'Jul', 
  286. '8' => 'Aug', 
  287. '9' => 'Sep', 
  288. '10' => 'Oct', 
  289. '11' => 'Nov', 
  290. '12' => 'Dec'
  291. );
  292. $day_array = make_numberarray(1, 31);
  293. $year_array = make_numberarray(2000, 2050);
  294. $days_array = array(
  295. 'Monday', 
  296. 'Tuesday', 
  297. 'Wednesday', 
  298. 'Thursday', 
  299. 'Friday', 
  300. 'Saturday', 
  301. 'Sunday'
  302. );
  303. $daysshort_array = array('S', 'M', 'T', 'W', 'T', 'F', 'S');
  304. // current dates
  305. $today_d = date('d');
  306. $today_m = date('m');
  307. $today_y = date('Y');
  308. $today = "$today_y-$today_m-$today_d";
  309. // default weekstart or use monday
  310. if (!$user['weekstart']) {
  311. $user['weekstart'] = 7;
  312. }
  313. // is it today?
  314. if ($year == $today_y AND $month == $today_m AND $day == $today_d) {
  315. $its_today = 1;
  316. }
  317. // any dates? use current
  318. if (!$year) {
  319. $year = $today_y;
  320. }
  321. if (!$month) {
  322. $month = $today_m;
  323. }
  324. if (!$day) {
  325. $day = $today_d;
  326. }
  327. if(!$date) {
  328. $date = $year . '-' . $month . '-' . $day;
  329. }
  330. $named_day = $day;
  331. $named_month =  date('M', mktime(0,0,0,$month,$day,$year));
  332. $named_year = $year;
  333. $taskstoday = 0;
  334. $taskstoday_overdue = 0;
  335. $tasks_today = cachetasks($today, $today, 1);
  336. if (is_array($tasks_today)) {
  337. foreach($tasks_today AS $date_tmp => $tasks) {
  338. foreach ($tasks AS $task) {
  339. if ($date_tmp != $today) {
  340. $taskstoday_overdue++;
  341. } else {
  342. $taskstoday++;
  343. }
  344. }
  345. }
  346. }
  347. if ($taskstoday_overdue) {
  348. $taskstoday = "$taskstoday/$taskstoday_overdue*";
  349. }
  350. #####################################################################################
  351. ############################### PAGE NAVIGATION ###############################
  352. #####################################################################################
  353. $hidden = form_hidden('do', $_REQUEST['do']) . form_hidden('type', $_REQUEST['type']);
  354. $hidden .= form_hidden('overdue', $_REQUEST['overdue']);
  355. if ($_REQUEST['do'] == 'yearly') {
  356. $year_before = $year - 1;
  357. $year_after = $year + 1;
  358. $jump_one = form_submit($year_before) . form_hidden('year', $year_before) . $hidden;
  359. $jump_two = form_submit($year_after) . form_hidden('year', $year_after) . $hidden;
  360. $jump_date = form_date('date', '', '', '', '', $date, array('y'));
  361. } elseif ($_REQUEST['do'] == 'daily' OR ($_REQUEST['do'] == 'weekly' AND $_REQUEST['type'] == 'calendar')) {
  362. $date_before = date("Y-m-d", strtotime("$date -1 day"));
  363. $date_b = explode('-', $date_before);
  364. $date_after = date("Y-m-d", strtotime("$date +1 day"));
  365. $date_a = explode('-', $date_after);
  366. if ($_REQUEST['do'] == 'weekly') {
  367. if (!$week) {
  368. $week = week_number("$year-$month-$day");
  369. }
  370. if ($week == 1) {
  371. $last_year_weeks = (int)strftime('%W',strtotime("Dec 31 " . ($year-1)));
  372. $jump_one = form_submit("Week $last_year_weeks, " . ($year - 1)) .
  373. $hidden . form_hidden('year', $year - 1) . form_hidden('week',
  374. $last_year_weeks);
  375. } else {
  376. $jump_one = form_submit("Week " . ($week - 1) . ", $year") .
  377. $hidden . form_hidden('year', $year) . form_hidden('week', $week - 1);
  378. }
  379. $nextweekdate = start_of_week($week + 1, $year);
  380. $nextweeknum = (int)week_number(date('Y-m-d', $nextweekdate));
  381. $weeks = (int)strftime('%W',strtotime("Dec 31 $year"));
  382. if ($nextweeknum >= $weeks) {
  383. $jump_two = form_submit("Week 1, " . ($year + 1)) . $hidden .
  384. form_hidden('year', $year+1) . form_hidden('week', 1);
  385. } else {
  386. $jump_two = form_submit("Week " . ($week + 1) . ", $year") .
  387. $hidden . form_hidden('year', $year) . form_hidden('week', $week + 1);
  388. }
  389. $jump_date .= "&nbsp;&nbsp;Week&nbsp;" . 
  390. form_select('week', range(1, $weeks), '', $week, 1) . 
  391. form_date_year('year', $year);
  392. } else {
  393. $jump_one = form_submit(format_date($date_before)) . $hidden .
  394. form_hidden('month', $date_b[1]) . 
  395. form_hidden('year', $date_b[0]) .
  396. form_hidden('day', $date_b[2]); 
  397. $jump_two = form_submit(format_date($date_after)) . $hidden . 
  398. form_hidden('month', $date_a[1]) . 
  399. form_hidden('year', $date_a[0]) . 
  400. form_hidden('day', $date_a[2]);
  401. $jump_date = form_date('date', '', '', '', '', $date);
  402. }
  403. } elseif ($_REQUEST['do'] == 'weekly' && $_REQUEST['type'] == 'list') {
  404. if (!$week) {
  405. $week = week_number("$year-$month-$day");
  406. }
  407. if ($week == 1) {
  408. $last_year_weeks = (int)strftime('%W',strtotime("Dec 31 " . ($year-1)));
  409. $jump_one = form_submit("Week $last_year_weeks, " . ($year - 1)) .
  410. $hidden . form_hidden('year', $year - 1) . form_hidden('week',
  411. $last_year_weeks);
  412. } else {
  413. $jump_one = form_submit("Week " . ($week - 1) . ", $year") . $hidden .
  414. form_hidden('year', $year) . form_hidden('week', $week - 1);
  415. }
  416. $nextweekdate = start_of_week($week + 1, $year);
  417. $nextweeknum = (int)week_number(date('Y-m-d', $nextweekdate));
  418. $weeks = (int)strftime('%W',strtotime("Dec 31 $year"));
  419. if ($nextweeknum >= $weeks) {
  420. $jump_two = form_submit("Week 1, " . ($year + 1)) . $hidden .
  421. form_hidden('year', $year+1) . form_hidden('week', 1);
  422. } else {
  423. $jump_two = form_submit("Week " . ($week + 1) . ", $year") . $hidden .
  424. form_hidden('year', $year) . form_hidden('week', $week + 1);
  425. }
  426. $jump_date = "Week " . form_select('week', range(1, $weeks), '', $week, 1) . 
  427. ' ' . form_date_year('year', $year);
  428. } elseif ($_REQUEST['do'] == 'monthly') {
  429. if ($month == 1) {
  430. $month_before = 12;
  431. $month_after = 2;
  432. $year_before = $year - 1;
  433. $year_after = $year;
  434. } elseif ($month == 12) {
  435. $month_before = 11;
  436. $month_after = 1;
  437. $year_before = $year;
  438. $year_after = $year + 1;
  439. } else {
  440. $month_before = $month - 1;
  441. $month_after = $month + 1;
  442. $year_before = $year;
  443. $year_after = $year;
  444. }
  445. $jump_one = form_submit(month_name($month_before)) . $hidden .
  446. form_hidden('month', $month_before) . form_hidden('year', $year_before);
  447. $jump_two = form_submit(month_name($month_after)) . $hidden .
  448. form_hidden('month', $month_after) . form_hidden('year', $year_after);
  449. $jump_date = form_date('date', '', '', '', '', $date, array('m', 'y'));
  450. }
  451. $nav = "<table width="100%"><form><tr>
  452. <form method="post" action="index.php"><td>$jump_one</td></form>
  453. <form method="post" action="index.php">$hidden<td align="center">$jump_date" . form_submit('Go') . "</td></form>
  454. <form method="post" action="index.php"><td align="right">$jump_two</td></form>
  455. </tr></table>
  456. ";
  457. // Echo the page navigation header
  458. $tw_both_nav_off="<a href="index.php?do=$_REQUEST[do]&type=$_REQUEST[type]&watch=0&year=$_REQUEST[year]&month=$_REQUEST[month]&day=$_REQUEST[day]&overdue=$_REQUEST[overdue]">Both</a>";
  459. $tw_watc_nav_off="<a href="index.php?do=$_REQUEST[do]&type=$_REQUEST[type]&watch=1&year=$_REQUEST[year]&month=$_REQUEST[month]&day=$_REQUEST[day]&overdue=$_REQUEST[overdue]">Ticket Watches</a>";
  460. $tw_norm_nav_off="<a href="index.php?do=$_REQUEST[do]&type=$_REQUEST[type]&watch=2&year=$_REQUEST[year]&month=$_REQUEST[month]&day=$_REQUEST[day]&overdue=$_REQUEST[overdue]">Normal Events</a>";
  461. $tw_both_nav_on="[Both]";
  462. $tw_watc_nav_on="[Ticket Watches]";
  463. $tw_norm_nav_on="[Normal Events]";
  464. switch ($_REQUEST['watch']) {
  465. default:
  466. case '0':
  467. $ticketwatch_nav = "$tw_both_nav_on&nbsp;$tw_watc_nav_off&nbsp;$tw_norm_nav_off";
  468. $watch = 0;
  469. break;
  470. case '1':
  471. $ticketwatch_nav = "$tw_both_nav_off&nbsp;$tw_watc_nav_on&nbsp;$tw_norm_nav_off";
  472. $watch = 1;
  473. break;
  474. case '2':
  475. $ticketwatch_nav = "$tw_both_nav_off&nbsp;$tw_watc_nav_off&nbsp;$tw_norm_nav_on";
  476. $watch = 2;
  477. break;
  478. }
  479. if (!$_REQUEST['overdue']) {
  480. $overdue = get_tasks(1);
  481. if ($overdue == 1) {
  482. $overdues = "<a href="index.php?do=daily&type=list&overdue=1" . iff($_REQUEST['search'], $search_url . "&search=$_REQUEST[search]&taskid=$_REQUEST[taskid]") . ""><FONT COLOR="red">1 overdue item</font></a>";
  483. } elseif ($overdue > 1) {
  484. $overdues = "<a href="index.php?do=daily&type=list&overdue=1" . iff($_REQUEST['search'], $search_url . "&search=$_REQUEST[search]&taskid=$_REQUEST[taskid]") . ""><FONT COLOR="red">$overdue overdue items</font></a>";
  485. }
  486. }
  487. echo "
  488. <table><tr><td valign="top" width="100%">
  489. <table width="440" border="0" cellspacing="0" cellpadding="0">
  490. <tr> 
  491. <td width="5" bgcolor="#BF4343">&nbsp;</td>
  492.     
  493. <td width="435">
  494. <table width="435" border="0" cellspacing="1" cellpadding="0">
  495.         <tr> 
  496.           <td width="90" height="20" class="calendar1">" . html_image('tech/bul089.gif', 'Calendar', 0, 0, 'hspace="5"') . "<strong>Calendar</strong></td>
  497.           <td width="42" align="center" class="calendar1">" . 
  498.   iff($_REQUEST['do'] == 'daily' AND $_REQUEST['type'] == 'calendar', '<strong>Day</strong>', "<a href="index.php?do=daily&type=calendar&watch=$watch&$year=year&month=$month&day=$day" class="calendar1">Day</a>") . "</td>
  499.           <td width="43" align="center" class="calendar1">" . 
  500.   iff($_REQUEST['do'] == 'weekly' AND $_REQUEST['type'] == 'calendar', '<strong>Week</strong>', "<a href="index.php?do=weekly&type=calendar&watch=$watch&year=$year&month=$month&day=$day" class="calendar1">Week") . "</td></td>
  501.           <td width="51" align="center" class="calendar1">" . 
  502.   iff($_REQUEST['do'] == 'monthly' AND $_REQUEST['type'] == 'calendar', '<strong>Month</strong>', "<a href="index.php?do=monthly&type=calendar&watch=$watch&year=$year&month=$month&day=$day" class="calendar1">Month</a>") . "</td>
  503.           <td width="43" align="center" class="calendar1">" . 
  504.   iff($_REQUEST['do'] == 'yearly' AND $_REQUEST['type'] == 'calendar', '<strong>Year</strong>', "<a href="index.php?do=yearly&type=calendar&watch=$watch&year=$year&month=$month&day=$day" class="calendar1">Year</a>") . "</td>
  505.           <td width="75" align="center" class="calendar1">&nbsp;</td>
  506.           <td width="82" align="center" class="calendar1">" . iff(($its_today AND $_REQUEST['type'] == 'calendar'), "Today ($taskstoday)", "<a href="index.php?do=daily&type=calendar&watch=$watch&year=$today_y&month=$today_m&day=$today_d" class="calendar1">Today ($taskstoday)</a>") . "</td>
  507.         </tr>
  508.         <tr> 
  509.           <td colspan="7"><img src="../../images/spacer.gif" width="5" height="5"></td>
  510.         </tr>
  511.         <tr> 
  512.           <td height="20" bgcolor="#DADADA">" . html_image('tech/bul090.gif', 'Tasks', 0, 0, 'hspace="5"') . "Tasks</td>
  513.           <td align="center" bgcolor="#DADADA">" . 
  514.   iff($_REQUEST['do'] == 'daily' AND $_REQUEST['type'] == 'list', '<strong>Day</strong>', "<a href="index.php?do=daily&type=list&watch=$watch&year=$year&month=$month&day=$day">Day</a>") . "</td>
  515.           <td align="center" bgcolor="#DADADA">" . 
  516.   iff($_REQUEST['do'] == 'weekly' AND $_REQUEST['type'] == 'list', '<strong>Week</strong>', "<a href="index.php?do=weekly&type=list&watch=$watch&year=$year&month=$month&day=$day">Week</a>") . "</td>
  517.           <td align="center" bgcolor="#DADADA">" . 
  518.   iff($_REQUEST['do'] == 'monthly' AND $_REQUEST['type'] == 'list', '<strong>Month</strong>', "<a href="index.php?do=monthly&type=list&watch=$watch&year=$year&month=$month&day=$day">Month</a>") . "</td>
  519.           <td align="center" bgcolor="#DADADA">" . 
  520.   iff($_REQUEST['do'] == 'yearly' AND $_REQUEST['type'] == 'list', '<strong>Year</strong>', "<a href="index.php?do=yearly&type=list&watch=$watch&year=$year&month=$month&day=$day">Year</a>") . "</td>
  521.           <td align="center" bgcolor="#DADADA">&nbsp;</td>
  522.           <td align="center" bgcolor="#DADADA">" . iff(($its_today AND $_REQUEST['type'] == 'list'), "Today ($taskstoday)", "<a href="index.php?do=daily&type=list&watch=$watch&year=$today_y&month=$today_m&day=$today_d" >Today ($taskstoday)</a>") . "</td>
  523.         </tr>
  524.         <tr> 
  525.           <td colspan="7"><img src="../../images/spacer.gif" width="5" height="5"></td>
  526.         </tr>
  527.         <tr> 
  528.           <td colspan="7" align="center">
  529. $nav
  530.   </td>
  531.         </tr>
  532.       </table>
  533.   &nbsp;&nbsp;&nbsp;<b>Event type(s) to display:</b> $ticketwatch_nav
  534.   <center>$overdues</center>
  535. </td></tr></table>";
  536. // Show the search form.
  537. if ($_REQUEST['yenddate'] && $_REQUEST['menddate'] && $_REQUEST['denddate']) {
  538. $ed = $_REQUEST['yenddate'].'-'.$_REQUEST['menddate'].'-'.$_REQUEST['denddate'];
  539. } else {
  540. $ed = $date;
  541. }
  542. if ($_REQUEST['ystartdate'] && $_REQUEST['mstartdate'] && $_REQUEST['dstartdate']) {
  543. $sd = $_REQUEST['ystartdate'].'-'.$_REQUEST['mstartdate'].'-'.$_REQUEST['dstartdate'];
  544. } else {
  545. $sd = '';
  546. }
  547. switch ($_REQUEST['completed']) {
  548. case 'all':
  549. $all = 'checked'; break;
  550. case 'complete':
  551. $complete = 'checked'; break;
  552. case 'incomplete':
  553. $incomplete = 'checked'; break;
  554. }
  555. if ($search) {
  556. if (is_array($_REQUEST['techs'])) {
  557. $techs = join("|", $_REQUEST['techs']);
  558. } else {
  559. $techs = '';
  560. }
  561. $search_url = 'title=' . htmlspecialchars_uni($_REQUEST['title']) .
  562. '&description=' . htmlspecialchars_uni($_REQUEST['description']) .
  563. "&ystartdate=$_REQUEST[ystartdate]".
  564. "&mstartdate=$_REQUEST[mstartdate]".
  565. "&dstartdate=$_REQUEST[dstartdate]".
  566. "&yenddate=$_REQUEST[yenddate]".
  567. "&menddate=$_REQUEST[menddate]".
  568. "&denddate=$_REQUEST[denddate]".
  569. "&completed=$_REQUEST[completed]".
  570. "&techs=$techs";
  571. $midbox = "<B>Viewing&nbsp;Search&nbsp;Results</B>&nbsp;&nbsp;<BR><A HREF="search.php?$search_url">Edit&nbsp;Search</A>&nbsp;&nbsp;<A HREF="search.php">Start&nbsp;a&nbsp;New&nbsp;Search</A>&nbsp;&nbsp;<BR><BR>$midbox";
  572. echo "<br /><center>$midbox</center>";
  573. }
  574. echo "</td><td align="right" valign="top">";
  575. $task_table = "<table><form method="post" action="index.php">
  576. <tr><td>" . 
  577. form_input('title', 'Title ...', 20, '', '', "onfocus="this.value='';"") . 
  578. " <a href="new.php">Advanced Options</a></td></tr><tr><td>" . 
  579. form_textarea('description', 40, 4, 'Message ...', '', '',  "onfocus="this.value='';"") . 
  580. "</td></tr><tr><td>" . 
  581. $hidden . 
  582. form_hidden('addentry', 1) . 
  583. form_hidden('month', $month) . 
  584. form_hidden('year', $year) . 
  585. form_hidden('day', $day) . 
  586. form_date('date', '', '', '', '', $date) . 
  587. form_submit('Add') .  
  588. "&nbsp;" . thelp('Calendar', 'Quick Add Task') . 
  589. "</td></tr></form></table>";
  590. fancy_table('100%', "Add a Quick Task", $task_table);
  591. echo "</td></tr></table>";
  592. #####################################################################################
  593. ########################### GET CACHED DATA FOR DATE RANGE ##############################
  594. #####################################################################################
  595. ########################### MONTHLY VIEW ##############################
  596. if ($_REQUEST['do'] == "monthly" AND $_REQUEST['type'] == "list") {
  597. if ($search) {
  598. if (!validate_ymd($startdate)) {
  599. $startdate = '1970-01-01';
  600. }
  601. if (!validate_ymd($enddate)) {
  602. $enddate = date('2038-01-19');
  603. }
  604. if ($search == 'upcoming') {
  605. $data = cachetasks($startdate, $enddate, 1, NULL, NULL, NULL, NULL, $watch);
  606. } else {
  607. $data = cachetasks($startdate, $enddate, $_REQUEST['completed'],
  608. $_REQUEST['title'], $_REQUEST['description'], $_REQUEST['taskid'],
  609. $_REQUEST['techs'], $watch);
  610. }
  611. } else {
  612. $enddate = date('Y-m-d', strtotime(date('Y-m-d', strtotime("$year-$month-01 +1 month")) . " -1 days"));
  613. $enddate_tmp = explode('-', $enddate);
  614. $data = cachetasks($year . '-' . $month . '-1', $year . '-' . $month .
  615. $enddate_tmp[2], NULL, NULL, NULL, NULL, NULL, $watch);
  616. }
  617. ############################## WEEKLY ############################
  618. } elseif ($_REQUEST['do'] == "weekly") {
  619. if ($week) { 
  620. $weeknum = $week;
  621. } else {
  622. $weeknum = week_number("$year-$month-$day");
  623. }
  624. $startdate = start_of_week($weeknum, $year);
  625. $dayofweek = day_of_week(date("Y-m-d", $startdate));
  626. if ($user['weekstart'] < 7) {
  627. $startdate = strtotime(date('Y-m-d', $startdate) . " +$user[weekstart] days");
  628. }
  629. if ($user['weekstart'] == 7) { 
  630. $startday = 0 ;
  631. } else {
  632. $startday = $user['weekstart'] - 1;
  633. }
  634. if ($dayofweek < $startday) {
  635. $offset = $startday - $dayofweek;
  636. $startdate = strtotime(date('Y-m-d', $startdate) . " -$offset days");
  637. } elseif ($dayofweek > $startday) {
  638. $offset = $dayofweek - $startday;
  639. $startdate = strtotime(date('Y-m-d', $startdate) . " +$offset days");
  640. }
  641. $enddate = strtotime(date('Y-m-d', $startdate) . " +6 days");
  642. $data = cachetasks(date('Y-m-d', $startdate), date('Y-m-d', $enddate), NULL, NULL, NULL, NULL, NULL, $watch);
  643. ############################ YEARLY VIEW ############################
  644. } elseif ($_REQUEST['do'] == "yearly") {
  645. $startdate = "$year-01-01"; $enddate = "$year-12-31";
  646. $data = cachetasks($startdate, $enddate, NULL, NULL, NULL, NULL, NULL, $watch);
  647. ############################ DAILY VIEW ############################
  648. } elseif ($_REQUEST['do'] == "daily") {
  649. $startdate = $date; $enddate = $date;
  650. $data = cachetasks($startdate, $enddate, NULL, NULL, NULL, NULL, NULL, $watch);
  651. echo "<br /><table width="100%"><tr><td valign="top">";
  652. }
  653. ##################################################################################
  654. for ($i = 0; $i < 24; $i++) {
  655. $end_table[$i] = array();
  656. }
  657. // We'll use the user's "ticket_number" setting for number of items to show per page.
  658. if ($settings['ticket_number']) {
  659. $perpage = $settings['ticket_number'];
  660. } else {
  661. $perpage = 20;
  662. }
  663. // We start on page 1 unless the user navigation has specified otherwise
  664. if (isset($_REQUEST['page'])) {
  665. $page = $_REQUEST['page'];
  666. } else {
  667. $page = 1;
  668. }
  669. $thispage = 0; $curpage = 1;
  670. ##################################################################################
  671. ################################ SHOW LIST VIEW ###################################
  672. ##################################################################################
  673. $startdate_ts = iff(is_int($startdate), $startdate, strtotime($startdate));
  674. $enddate_ts = iff(is_int($enddate), $enddate, strtotime($enddate));
  675. // Assemble the daily list view data.
  676. if ($_REQUEST['type'] == "list") {
  677. if (is_array($data)) {
  678. foreach ($data AS $key => $var) {
  679. if (!$_REQUEST['overdue'] AND (!$_REQUEST['search']) AND (!((strtotime($key) >= $startdate_ts) AND (strtotime($key) <= $enddate_ts)))) {
  680. continue;
  681. }
  682. if (is_array($var)) {
  683. foreach ($var AS $key2 => $var2) {
  684. $skip = 0;
  685. if (!$var2[0]) { 
  686. break;
  687. }
  688. $var2[1] = trimstring($var2[1], 30, 1);
  689. $var2[2] = trimstring($var2[2], 15, 1);
  690. $time = explode(':', $var2[4]);
  691. if ($var2[4] != "00:00:00") { 
  692. if ($_REQUEST['overdue']) {
  693. $printtime = format_date($var2[3], 'day') . '<br />' . time_ampm($var2[4], 1);
  694. } else {
  695. $printtime = time_ampm($var2[4], 1);
  696. }
  697. $showtime = 1;
  698. } else {
  699. if ($_REQUEST['overdue']) {
  700. $printtime = format_date($var2[3], 'day') . '<br /><I>No&nbsp;time&nbsp;specified</I>';
  701. } else {
  702. $printtime = '<I>No&nbsp;time&nbsp;specified</I>';
  703. }
  704. $time[0] = NULL;
  705. $time[1] = NULL;
  706. $time[2] = NULL;
  707. }
  708. $tmp_today = strtotime($today);
  709. if ($tmp_last != $var2[3] OR (!$var2[3]) OR (!$have_drawn_mid)) {
  710. $tmp_last = $var2[3];
  711. if ($_REQUEST['do'] != 'daily') {
  712. $draw_mid = 1;
  713. }
  714. } else {
  715. $draw_mid = 0;
  716. }
  717. $tmp_item = strtotime($var2[3]);
  718. if (($tmp_today > $tmp_item) AND !$var2[5]) { 
  719. // The item is overdue and not completed
  720. if ($_REQUEST['overdue'] != NULL) { 
  721. // If we're showing overdue items, show it, otherwise, skip it
  722. $item_color = "red";
  723. } else {
  724. if (!(strtotime("$year-$month-$day" == $tmp_item))) {
  725. $skip = 1;
  726. $overdue++;
  727. } else {
  728. $item_color = "red";
  729. }
  730. }
  731. } else { 
  732. // The item isn't overdue or it's in the past but finished
  733. if ($_REQUEST['overdue']) { 
  734. $normal++;
  735. $skip = 1;
  736. } else {
  737. $item_color = "black";
  738. }
  739. }
  740. if ($tmp_today == $tmp_item) {
  741. $printdate = 'Today';
  742. } else {
  743. $printdate = explode('-', $var2[3]);
  744. $printdate = format_date($var2[3]) . " $printdate[0]";
  745. $printdate = str_replace(' ', '&nbsp;', $printdate);
  746. if ($var2[6]) {
  747. $printtime = $printtime . '*';
  748. }
  749. }
  750. if ($var2[5]) {
  751. $this_completed = 1;
  752. $var2[1] = "[$var2[1]]";
  753. $var2[2] = "[$var2[2]]";
  754. $var2[5] = "Yes";
  755. } else {
  756. $var2[5] = "No";
  757. $this_completed = 0;
  758. }
  759. if ($var2[8]) { 
  760. // If this is someone else's ticket, italicize it
  761. $var2[1] = "<I>$var2[1]</I>";
  762. $var2[2] = "<I>$var2[2]</I>";
  763. }
  764. if($var2[7]) { 
  765. // If this is a ticket reminder, link to the ticket
  766. if (!$skip) {
  767. if ($_REQUEST['do'] == 'daily') {
  768. $ticket_rows[] = array(
  769. form_checkbox_single("$var2[0]|$var2[3]|1", 1, '', 'ids'),
  770. "$printdate",
  771. "<B>$var2[1]</B>",
  772. "$var2[5]",
  773. "<a href="../tickets/ticketview.php?id=$var2[0]">Ticket&nbsp;#$var2[0]</a>"
  774. );
  775. $table_row = NULL;
  776. } else {
  777. $table_row = array(
  778. form_checkbox_single("$var2[0]|$var2[3]|1", 1, '', 'ids'),
  779. "$printdate",
  780. "<B>$var2[1]</B>",
  781. "$var2[5]",
  782. "<a href="../tickets/ticketview.php?id=$var2[0]">Ticket&nbsp;#$var2[0]</a>"
  783. );
  784. }
  785. }
  786. } else { 
  787. // Otherwise, show view and edit links
  788. if ($var2[10] == $user['id']) {
  789. $editlink = "<A HREF="edit.php?id=$var2[0]">Edit</A>";
  790. } else {
  791. $editlink = NULL;
  792. }
  793. $table_row = array(
  794. form_checkbox_single("$var2[0]|$var2[3]", 1, '', 'ids'),
  795. "$printtime",
  796. "<B>$var2[1]</B>: $var2[2]",
  797. "$var2[5]",
  798. "<a href="viewtask.php?id=$var2[0]&date=$var2[3]">View</a>&nbsp;&nbsp;&nbsp;$editlink"
  799. );
  800. }
  801. if (!$skip) {
  802. $thispage++;
  803. $completed_items += $this_completed;
  804. if ($_REQUEST['type'] == 'list') { 
  805. // If we're generating a list, also handle pagination
  806. if ($thispage > $perpage) {
  807. $thispage = 1;
  808. $curpage++;
  809. }
  810. // Are we on the desired page?
  811. if ($curpage != $page) { 
  812. // Nope, wrong page, skip
  813. $skip = 1;
  814. } else {
  815. $skip = 0;
  816. }
  817. $count++;
  818. } else {
  819. $count++;
  820. }
  821. }
  822. if ((!$skip) AND is_array($table_row)) {
  823. if ($_REQUEST['do'] == 'daily') {
  824. if ($time[0] != NULL) {
  825. if ($draw_mid) {
  826. $end_table[(int)$time[0]][] = table_midheader($printdate);
  827. $have_drawn_mid = 1;
  828. }
  829. $end_table[(int)$time[0]][] = $table_row;
  830. } else {
  831. if ($draw_mid) {
  832. $notime_table[] = table_midheader($printdate);
  833. $have_drawn_mid = 1;
  834. }
  835. $notime_table[] = $table_row;
  836. }
  837. } else {
  838. if ($draw_mid) {
  839. $lead_table[] = table_midheader($printdate);
  840. $have_drawn_mid = 1;
  841. }
  842. $lead_table[] = $table_row;
  843. }
  844. }
  845. }
  846. }
  847. }
  848. }
  849. $tmp_table = array();
  850. for ($i = 0; $i < 8; $i++) {
  851. foreach ($end_table[$i] as $key => $var) {
  852. $tmp_table[] = $var;
  853. }
  854. }
  855. if (count($tmp_table)) {
  856. if ($_REQUEST['type'] == 'calendar' AND $showtime) {
  857. $lead_table[] = array('<B><U>12pm&nbsp;-&nbsp;7am</U></B>');
  858. }
  859. foreach($tmp_table AS $val) {
  860. $lead_table[] = $val;
  861. }
  862. $tmp_table = array();
  863. }
  864. for ($i = 8; $i < 19; $i++) {
  865. foreach ($end_table[$i] as $key => $var) {
  866. $tmp_table[] = $var;
  867. }
  868. if (count($tmp_table)) {
  869. if ($_REQUEST['type'] == 'calendar') {
  870. $lead_table[] = array('<B><U>'. time_ampm("$i:00:00", 2) . "</U></B>");
  871. }
  872. foreach($tmp_table AS $val) {
  873. $lead_table[] = $val;
  874. }
  875. $tmp_table = array();
  876. }
  877. }
  878. for ($i = 19; $i < 24; $i++) {
  879. foreach ($end_table[$i] as $key => $var) {
  880. $tmp_table[] = $var;
  881. }
  882. }
  883. if (count($tmp_table)) {
  884. if ($_REQUEST['type'] == 'calendar') {
  885. $lead_table[] = array('<B><U>7pm&nbsp;-&nbsp;12pm</U></B>');
  886. }
  887. foreach($tmp_table AS $val) {
  888. $lead_table[] = $val;
  889. }
  890. }
  891. // Now add the non-timed events
  892. if (is_array($notime_table)) {
  893. if ($_REQUEST['type'] == 'calendar') {
  894. $lead_table[] = array('<B><U>Untimed Events</U></B>');
  895. }
  896. foreach ($notime_table AS $val) {
  897. $lead_table[] = $val;
  898. }
  899. }
  900. $table = $lead_table;
  901. $form = form_select('action', array(0 => 'Toggle Complete', 1 => 'Delete', 2 => 'Stop Repeating'));
  902. $form .= form_hidden('do', $_REQUEST['do']) . form_hidden('type', $_REQUEST['type']);
  903. $form .= form_hidden('year', $year) . form_hidden('month', $month) . form_hidden('day', $day);
  904. $form .= form_hidden('watch', $watch) . form_hidden('week', $week) . form_hidden('overdue', $_REQUEST['overdue']);
  905. $form .= "<input type="submit" name="Process" value="Process">n";
  906. if ($_REQUEST['search']) {
  907. $form .= form_hidden('search', htmlspecialchars($_REQUEST['search']));
  908. $form .= form_hidden('title', htmlspecialchars($_REQUEST['title']));
  909. $form .= form_hidden('description', htmlspecialchars($_REQUEST['description']));
  910. $form .= form_hidden('completed', htmlspecialchars($_REQUEST['completed']));
  911. $form .= form_hidden('ystartdate', htmlspecialchars($_REQUEST['ystartdate']));
  912. $form .= form_hidden('mstartdate', htmlspecialchars($_REQUEST['mstartdate']));
  913. $form .= form_hidden('dstartdate', htmlspecialchars($_REQUEST['dstartdate']));
  914. $form .= form_hidden('yenddate', htmlspecialchars($_REQUEST['yenddate']));
  915. $form .= form_hidden('menddate', htmlspecialchars($_REQUEST['menddate']));
  916. $form .= form_hidden('denddate', htmlspecialchars($_REQUEST['denddate']));
  917. if (is_array($_REQUEST['techs'])) {
  918. $form .= form_hidden('techs', join('|', $_REQUEST['techs']));
  919. } else {
  920. $form .= form_hidden('techs', '');
  921. }
  922. $form .= form_hidden('taskid', $_REQUEST['taskid']);
  923. }
  924. $width = array("5%",'10%',"10%","20%","5%");
  925. $cols = array('<input type="checkbox" name="allbox" onclick="checkall(this.form);" />', 'When', 'Item', 'Complete', 'Options');
  926. echo "<form method="post" action="index.php" name="tasks" id="tasks">";
  927. table_header('Your Tasks');
  928. table_content($cols, $table, '', '', '', '', $width);
  929. table_footer('', 'Left', $form);
  930. $form2 = form_select('action', array(0 => 'Toggle Complete', 1 => 'Delete', 2 => 'Stop Repeating'));
  931. $form2 .= "<input type="submit" name="Process" value="Process">n";
  932. $cols = array('<input type="checkbox" name="allbox2" onclick="checkall(this.form);" />', 'When', 'Item', 'Complete', 'Options');
  933. if (is_array($ticket_rows)) {
  934. table_header('Your Ticket Reminders');
  935. table_content($cols, $ticket_rows, '', '', '', '', $width);
  936. table_footer('', 'Left', $form2);
  937. }
  938. // key
  939. ?>
  940. <table cellpadding="2">
  941. <tr><td colspan="2" align="center"><b><u>Key</u></b></td></tr>
  942. <tr><td>* Repeating task</b></td><td>* on left of entry</td></tr>
  943. <tr><td><b>Normal tasks</b></td><td>Entries in bold</td></tr>
  944. <tr><td><i>Tasks assigned to other technician(s)</i></td><td>Entries in italics</td></tr>
  945. <tr><td>[Completed Tasks]</td><td>Entries enclosed in []</td></tr>
  946. </table>
  947. <br />
  948. Note: Deleting a repeat item will delete <I>all</I> occurrences of that item! To change the repeating date(s) of an item, select "Edit" instead.
  949. <br />
  950. <?php
  951. if (count($table) AND ($count > $perpage)) {
  952. echo form_hidden('overdue', $_REQUEST['overdue']);
  953. echo pagenav($count, $perpage, $page, '', 'tasks', 'select', 'page');
  954. echo "</FORM>";
  955. }
  956. echo "<span id="hiddenbit"></span>";
  957. }
  958. ##################################################################################
  959. ################################ CALENDAR VIEW ###################################
  960. ##################################################################################
  961. ######################### DAILY CALENDAR ##############################
  962. if ($_REQUEST['do'] == "daily" AND $_REQUEST['type'] == "calendar") {
  963. echo "<table width="100%"><tr><td valign="top" width="80%">";
  964. $hours = array(
  965. '0' => 'Untimed',
  966. '1' => '12pm - 7am',
  967. '2' => '7am - 8am',
  968. '3' => '8am - 9am',
  969. '4' => '9am - 10am',
  970. '5' => '10am - 11am',
  971. '6' => '11am - 12am',
  972. '7' => '12am - 1pm',
  973. '8' => '1pm - 2pm',
  974. '9' => '2pm - 3pm',
  975. '10' => '3pm - 4pm',
  976. '11' => '4pm - 5pm',
  977. '12' => '5pm - 6pm',
  978. '13' => '6pm - 7pm',
  979. '14' => '7pm - 12pm'
  980. );
  981. if (!(is_array($data))) {
  982. $data = array();
  983. };
  984. $todays_date = strtotime(date('Y-m-d'));
  985. foreach ($data AS $key => $var) {
  986. // Only show today's entries.
  987. if ($key == date('Y-m-d', strtotime("$year-$month-$day"))) {
  988. foreach ($var AS $key2 => $var2) {
  989. if ((strtotime($var2[3]) < $todays_date) AND !$var2[5]) {
  990. $overdue = 1;
  991. } else {
  992. $overdue = 0;
  993. }
  994. if ($var2[7]) {
  995. $link = "<a href="../tickets/ticketview.php?id=$var2[0]">Ticket&nbsp;#$var2[0]</a>";
  996. } else {
  997. if ($var2[10] == $user['id']) {
  998. $editlink = "(<A HREF="edit.php?id=$var2[0]">Edit</A>)";
  999. } else {
  1000. $editlink = NULL;
  1001. }
  1002. $link = "<a href="viewtask.php?id=$var2[0]&date=$var2[3]"><B>$var2[1]</B>: $var2[2]</a>&nbsp;&nbsp;&nbsp;$editlink";
  1003. }
  1004. if ($overdue) {
  1005. $link .= "&nbsp;&nbsp;&nbsp;<font color="red"><B>Overdue</B></font>";
  1006. }
  1007. $time = explode(':', $var2[4]);
  1008. if ($time[0] == '00' AND $time[1] == '00' AND $time[2] == '00') {
  1009. $hours_data[0] .= $link . "<br />";
  1010. $hours_count[0]++;
  1011. } else {
  1012. switch($time[0]) {
  1013. case 0:
  1014. case 1:
  1015. case 2:
  1016. case 3:
  1017. case 4:
  1018. case 5:
  1019. case 6:
  1020. $hours_data[1] .= $link . "<br />";
  1021. $hours_count[1]++;
  1022. break;
  1023. case 7:
  1024. $hours_data[2] .= $link . "<br />";
  1025. $hours_count[2]++;
  1026. break;
  1027. case 8:
  1028. $hours_data[3] .= $link . "<br />";
  1029. $hours_count[3]++;
  1030. break;
  1031. case 9:
  1032. $hours_data[4] .= $link . "<br />";
  1033. $hours_count[4]++;
  1034. break;
  1035. case 10:
  1036. $hours_data[5] .= $link . "<br />";
  1037. $hours_count[5]++;
  1038. break;
  1039. case 10:
  1040. $hours_data[5] .= $link . "<br />";
  1041. $hours_count[5]++;
  1042. break;
  1043. case 11:
  1044. $hours_data[6] .= $link . "<br />";
  1045. $hours_count[6]++;
  1046. break;
  1047. case 12:
  1048. $hours_data[7] .= $link . "<br />";
  1049. $hours_count[7]++;
  1050. break;
  1051. case 13:
  1052. $hours_data[8] .= $link . "<br />";
  1053. $hours_count[8]++;
  1054. break;
  1055. case 14:
  1056. $hours_data[9] .= $link . "<br />";
  1057. $hours_count[9]++;
  1058. break;
  1059. case 15:
  1060. $hours_data[10] .= $link . "<br />";
  1061. $hours_count[10]++;
  1062. break;
  1063. case 16:
  1064. $hours_data[11] .= $link . "<br />";
  1065. $hours_count[11]++;
  1066. break;
  1067. case 17:
  1068. $hours_data[12] .= $link . "<br />";
  1069. $hours_count[12]++;
  1070. break;
  1071. case 18:
  1072. $hours_data[13] .= $link . "<br />";
  1073. $hours_count[13]++;
  1074. break;
  1075. case 19:
  1076. case 20:
  1077. case 21:
  1078. case 22:
  1079. case 23:
  1080. $hours_data[14] .= $link . "<br />";
  1081. $hours_count[14]++;
  1082. break;
  1083. }
  1084. }
  1085. }
  1086. }
  1087. }
  1088. foreach ($hours AS $key => $var) {
  1089. $html = "<table cellpadding="8" cellspacing="0">
  1090. <tr><td valign="top"><b><u>$var</u></b>";
  1091. if ($hours_count[$key]) {
  1092. if ($hours_count[$key] == 1) {
  1093. $items = "item";
  1094. } else {
  1095. $items = "items";
  1096. }
  1097. $html .= "<font color="green"><b> - {$hours_count[$key]} $items:</b></font>";
  1098. }
  1099. $html .= "</td></tr>
  1100. <tr><td>{$hours_data[$key]}</td></tr></table>";
  1101. $content[] = $html;
  1102. unset($html);
  1103. unset($task_counts);
  1104. unset($items);
  1105. }
  1106. echo table_list("Tasks for Today", $content, '100%', 1);
  1107. echo "<td width="30">&nbsp;</td><td valign="top" width="160" align="right">";
  1108. $m_start = explode('-', date('Y-m-d', strtotime("$year-$month-01 -1 month")));
  1109. $m_end = explode('-', date('Y-m-d', strtotime("$year-$month-01 +1 month")));
  1110. $data = cachetasks(
  1111. "$m_start[0]-$m_start[1]-$m_start[2]", 
  1112. "$m_end[0]-$m_end[1]-$m_end[2]", 
  1113. NULL, NULL, NULL, NULL, NULL, $watch);
  1114. if (!$data) {
  1115. $data = array();
  1116. };
  1117. echo make_month($m_start[1], $m_start[0], NULL);
  1118. echo "<BR><BR>";
  1119. echo make_month($month, $year, NULL);
  1120. echo "<BR><BR>";
  1121. echo make_month($m_end[1], $m_end[0], NULL);
  1122. echo "</td></tr></table>";
  1123. }
  1124. ############################ MONTHLY CALENDAR #########################
  1125. if ($_REQUEST['do'] == "monthly" AND $_REQUEST['type'] == "calendar") {
  1126. echo make_month($month, $year, '', '', 1);
  1127. }
  1128. ########################## WEEKLY CALENDAR #############################
  1129. if ($_REQUEST['do'] == "weekly" AND $_REQUEST['type'] == "calendar") {
  1130. $daynum = day_of_week(date('Y-m-d', $startdate));
  1131. for ($curdate = $startdate; $curdate <= $enddate; $curdate = strtotime(date('Y-m-d', $curdate) . " +1 day")) {
  1132. $caldate = explode('-', date('Y-m-d', $curdate));
  1133. $cal_date = format_date(date('Y-m-d', $curdate));
  1134. if (($caldate[0] == $today_y) &&
  1135. ($caldate[1] == $today_m) &&
  1136. ($caldate[2] == $today_d)) {
  1137. $cal_date = "$cal_date";
  1138. }
  1139. $target = "$caldate[0]-" . sprintf("%02d-", $caldate[1]) . sprintf("%02d", $caldate[2]);
  1140. if (isset($data[$target])) {
  1141. foreach ($data[$target] as $task) {
  1142. $task_counts++;
  1143. if (strlen($task[1]) > 30) {
  1144. $task[1] = substr($task[1], 0, 30) . "...";
  1145. }
  1146. if ($task[4] != "00:00:00") {
  1147. $task[4] = '[' . time_ampm($task[4]) . ']';
  1148. } else {
  1149. $task[4] = "";
  1150. }
  1151. $items .= "$task[4] $task[1]<BR>n";
  1152. }
  1153. }
  1154. if ($task_counts) { 
  1155. if ($task_counts > 1) {
  1156. $task_counts = "$task_counts tasks:";
  1157. } else {
  1158. $task_counts = "$task_counts task:";
  1159. }
  1160. } else {
  1161. $task_counts = "";
  1162. }
  1163. $daynum = day_of_week("$caldate[0]-$caldate[1]-$caldate[2]");
  1164. if (!$daynum) {
  1165. $class = "normalCellalt1";
  1166. } else {
  1167. $class = "normalCellalt2";
  1168. }
  1169. $dayname = weekday_name($daynum);
  1170. $html = "<table cellpadding="8" cellspacing="0">
  1171. <tr><td><a href="index.php?do=daily&type=calendar&year=$caldate[0]&month=$caldate[1]&day=$caldate[2]&watch=$watch"><b>$dayname, $cal_date</a></b>";
  1172. if ($task_counts) {
  1173. $html .= "<font color="green"><b> - $task_counts</b></font>";
  1174. }
  1175. $html .= "</td></tr>
  1176. <tr><td>$items</td></tr></table>";
  1177. $content[] = $html;
  1178. unset($html);
  1179. unset($task_counts);
  1180. unset($items);
  1181. }
  1182. echo table_list("Tasks for this Week", $content, '100%', 1);
  1183. }
  1184. ############################### YEARLY CALENDAR ###############################
  1185. if ($_REQUEST['do'] == "yearly" AND $_REQUEST['type'] == "calendar") {
  1186. echo "<table width="100%" align="center"><tr><td valign="top" align="center">";
  1187. echo make_month(1, $year, $data, $watch);
  1188. echo "</td><td align="center" valign="top">";
  1189. echo make_month(2, $year, $data, $watch);
  1190. echo "</td><td align="center" valign="top">";
  1191. echo make_month(3, $year, $data, $watch);
  1192. echo "</td><td valign="top" align="center">";
  1193. echo "</td></tr><tr><td align="center" valign="top"><BR><BR>";
  1194. echo make_month(4, $year, $data, $watch);
  1195. echo "</td><td align="center" valign="top"><BR><BR>";
  1196. echo make_month(5, $year, $data, $watch);
  1197. echo "</td><td align="center" valign="top"><BR><BR>";
  1198. echo make_month(6, $year, $data, $watch);
  1199. echo "</td></tr><tr><td align="center" valign="top"><BR><BR>";
  1200. echo make_month(7, $year, $data, $watch);
  1201. echo "</td><td align="center" valign="top"><BR><BR>";
  1202. echo make_month(8, $year, $data, $watch);
  1203. echo "</td><td align="center" valign="top"><BR><BR>";
  1204. echo make_month(9, $year, $data, $watch);
  1205. echo "</td></tr><tr><td align="center" valign="top"><BR><BR>";
  1206. echo make_month(10, $year, $data, $watch);
  1207. echo "</td><td align="center" valign="top"><BR><BR>";
  1208. echo make_month(11, $year, $data, $watch);
  1209. echo "</td><td align="center" valign="top"><BR><BR>";
  1210. echo make_month(12, $year, $data, $watch);
  1211. echo "</td></tr></table>";
  1212. }
  1213. tech_footer();
  1214. /*
  1215. // _______________________________________________________________
  1216. // Options:
  1217. //
  1218. // do Specify action or the view duration
  1219. // added Flash a "task added" message then display
  1220. // a monthly calendar
  1221. // daily Show events for the given day.
  1222. // weekly Show events for the given week.
  1223. // monthly Show events for the given month.
  1224. // yearly Show events for the given year.
  1225. // type Specify the view type
  1226. // list Just list events
  1227. // calendar Display specified period as a calendar.
  1228. // watch Specifies whether to include ticket watch items
  1229. // 0 Show all events
  1230. // 1 Show only ticket watches
  1231. // 2 Show only normal events
  1232. // year, month, day
  1233. // Specifies the date to start viewing items from (all views).
  1234. // addentry If non-zero, add a new entry.
  1235. // ydate, mdate, ddate, title, description
  1236. // Specifies data for entry to add.
  1237. // search If non-zero, perform a search.
  1238. // upcoming Search for all unfinished tasks.
  1239. // [non-zero] Search for specified tasks.
  1240. // completed Specify whether to search for complete or incomplete items
  1241. // all Search for all items (default)
  1242. // complete Search for completed items
  1243. // incomplete Search for unfinished items
  1244. // ystartdate, mstartdate, dstartdate
  1245. // yenddate, menddate, denddate
  1246. // Specifies starting and ending dates for event search
  1247. // (inclusive)
  1248. // Process If non-zero, process one or more events (toggle or delete)
  1249. // action If specified, either delete the item(s) entirely or stop
  1250. // repeating. If not specified, toggle the item(s) complete
  1251. // status.
  1252. // ids An array of selected items, specifying entry ID, due date of
  1253. // the selected event (sometimes a repeating event instance),
  1254. // and the optional type. Example: 134|2003-11-23|2
  1255. // If the trailing |2 is included, the event is a ticket watch,
  1256. // not a normal calendar event.
  1257. // 2 Stop the item(s) repeating, set due date to today.
  1258. // [non-zero] Delete the task entirely.
  1259. // overdue Specify whether to display overdue items
  1260. // 0 Do not show overdue items
  1261. // 1 Show only overdue items
  1262. // taskid Show only repeating events whose parent is the specified ID
  1263. // techs Search for tasks created by specific techs
  1264. // page Specify current page number for long lists
  1265. */
  1266. ?>