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

电子政务应用

开发平台:

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: viewtask.php,v $
  15. // | $Date: 2004/02/10 01:34:25 $
  16. // | $Revision: 1.45 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Task details view.
  20. // +-------------------------------------------------------------+
  21. // This file both shows item details and handles certain edit operations
  22. // ("muting" a task, and toggling it completed). Muting a task stops it
  23. // repeating immediately.
  24. error_reporting(E_ALL ^ E_NOTICE);
  25. // start file
  26. require("./../global.php");
  27. require_once(INCLUDE_PATH . 'functions/calendar_functions.php');
  28. // globalise variables
  29. $global = array (
  30. array('id'), 
  31. array('techid'), 
  32. array('date'),
  33. array('tasktoggle') // ticketid
  34. );
  35. rg($global);
  36. tech_nav('calendar');
  37. // If there's no ID, complain and give up.
  38. if (!($id = trim($id)) AND !($taskdate = trim($taskdate))) {
  39. mistake('No valid task ID was specified. Please try your request again.');
  40. exit;
  41. }
  42. // Fetch the taskdata
  43. $taskdata = $db->query_return("SELECT calendar_task.*, tech.username AS techmaker_username FROM 
  44. calendar_task, tech WHERE calendar_task.techmaker = tech.id AND 
  45. calendar_task.id = '$id'");
  46. if (!$rows = $db->num_rows()) {
  47. mistake("The specified task ID ($id) doesn't exist. Please try your request again.");
  48. exit;
  49. }
  50. if ($taskdata['techmaker'] != $user['id']) { // This user doesn't own the task, check permissions
  51. $db->query("SELECT id FROM calendar_task_tech WHERE eventid = $id AND techid = $user[id]");
  52. if (!$db->num_rows()) {
  53. mistake('You do not have permission to view this task.');
  54. exit;
  55. }
  56. }
  57. $start = $taskdata['startdate'];
  58. $endd   = $taskdata['enddate'];
  59. $endt   = $taskdata['endtime'];
  60. // If a date was specified, we're looking at a repeat event, not its original.
  61. // We still show the original data, but replace the enddate with the date
  62. // specified.
  63. if ($date) {
  64. $event_due = our_date(convert_date($date), 'day');
  65. }
  66. // First, check if we're supposed to toggle a task's completed state
  67. if ($_REQUEST['do'] == "complete" OR $_REQUEST['do'] == "incomplete") {
  68. if ($_REQUEST['do'] == "complete") { $compl = 1; } else { $compl = 0; }
  69. if (!isset($_REQUEST['techid'])) { // If no techid is specified, the user is trying to set the complete state for *ALL* assigned techs.
  70. if ($taskdata['techmaker'] == $user['id']) { // If the user is the original task maker, honor the request.
  71. if ($date) { // If we're updating a repeating event ...
  72. $db->query("SELECT techid FROM calendar_task_tech WHERE eventid = $id");
  73. while ($res = $db->row_array()) {
  74. $techs[] = $res['techid'];
  75. }
  76. $db->query("DELETE FROM calendar_task_iteration WHERE taskid = $id AND date = '$date'");
  77. foreach ($techs as $key => $val) {
  78. $db->query("INSERT INTO calendar_task_iteration (task_techid, taskid, completed, date) VALUES ('$val', '$id', '$compl', '$date')");
  79. }
  80. } else {
  81. $db->query("UPDATE calendar_task_tech SET completed = $compl WHERE eventid = $id");
  82. }
  83. if ($taskdata['notifycompletion']) { // If the owner wants people to be mailed, start sending mail
  84. $db->query("SELECT techid, tech.email, tech.username FROM calendar_task_tech, tech
  85. WHERE calendar_task_tech.eventid = $id AND calendar_task_tech.techid = tech.id");
  86. while ($res = $db->row_array()) {
  87. $emails[$result['techid']]['username'] = $res['username'];
  88. $emails[$result['techid']]['email']    = $res['email'];
  89. }
  90. foreach ($emails as $key => $val) {
  91. $done = iff($compl, 'completed', 'not completed');
  92. $taskusername = $emails[$key]['username'];
  93. $taskurl = "viewtask.php?id=$id";
  94. $tasktitle = $taskdata['title'];
  95. $taskdescription = $taskdata['description'];
  96. $taskdone = $done;
  97. eval(makeemaileval('message', 'TECHBODY_task_toggled', $subject));
  98. dp_mail($emails[$key]['email'], $subject, $message);
  99. }
  100. }
  101. } else { // Otherwise, deny the request.
  102. mistake("You don't have the authority to set this task complete or incomplete.");
  103. }
  104. } else { // If a techid is supplied, the user is trying to set a specific user's (or his own) complete state for this task.
  105.     $db->query("SELECT techid FROM calendar_task_tech WHERE techid = $_REQUEST[techid] AND eventid = $id");
  106. if ($db->num_rows() or ($taskdata['techmaker'] == $user['id'])) { // If the user is assigned this task and is trying to change his own state, or if he's the task's creator, honor the request.
  107. if ($taskdata['techmaker'] == $user['id']) { // Tech owns the task; can change anybody's status
  108. $tid = $_REQUEST['techid'];
  109. } else { // Only assigned, can only change own status
  110. $tid = $user['id'];
  111. }
  112. if ($date) { // If we're updating a repeating event ...
  113. $db->query("DELETE FROM calendar_task_iteration WHERE task_techid = '$tid' AND taskid = '$id' AND date = '$date'");
  114. $db->query("REPLACE INTO calendar_task_iteration (task_techid, taskid, completed, date) VALUES ('$tid', '$id', '$compl', '$date')");
  115. } else {
  116. $db->query("UPDATE calendar_task_tech SET completed = '$compl' WHERE eventid = '$id' AND techid = '$tid'");
  117. }
  118. $db->query("SELECT id, username, email FROM tech WHERE id = '$taskdata[techmaker]' or id = '$user[id]'");
  119. while ($result = $db->row_array()) {
  120. $emails[$result['id']]['username']  = $result['username'];
  121. $emails[$result['id']]['email']  = $result['email'];
  122. }
  123. if (($taskdata['techmaker'] != $user['id']) && $taskdata['notifycompletion']) { // If the user doesn't own the task but is assigned to it and if the owner wants notification, send it
  124. $taskusername = $emails[$user['id']]['username'];
  125. $taskurl = "viewtask.php?id=$id";
  126. $tasktitle = $_REQUEST['title'];
  127. $taskdescription = $_REQUEST['description'];
  128. $taskdone = $done;
  129. eval(makeemaileval('message', 'TECHBODY_task_toggled', $subject));
  130. dp_mail($emails[$taskdata['techmaker']]['email'], $subject, $message);
  131. }
  132. } else { // Otherwise, deny the request.
  133. mistake("You don't have the authority to set this task complete or incomplete.");
  134. }
  135. }
  136. }
  137. if ($_REQUEST['do'] == "mute") {
  138. $date = $_REQUEST['date'];
  139. $assigned = $db->query_return_array_id("SELECT techid FROM calendar_task_tech WHERE eventid = $id", 'techid');
  140. if ($taskdata['techmaker'] == $user['id']) {
  141. // If the user owns the task, nuke all assigned tech's occurrences of it on this date
  142. $db->query("DELETE FROM calendar_task_iteration WHERE date = '$date' AND taskid = '$id'");
  143. foreach ($assigned AS $assigned_tech) {
  144. $db->query("INSERT INTO calendar_task_iteration SET
  145. task_techid = '$assigned_tech',
  146. taskid = '$id',
  147. completed = '-1',
  148. date = '$date'"
  149. );
  150. jump("viewtask.php?id=$id", 'Occurrence deleted. Viewing original event.');
  151. exit;
  152. };
  153. } elseif ($db->num_rows()) { 
  154. // If the user is assigned to the task, nuke his own occurrence but no one else's
  155. $db->query("DELETE FROM calendar_task_iteration WHERE date = '$date' AND taskid = '$id' AND task_techid = '$user[id]'");
  156. $db->query("INSERT INTO calendar_task_iteration SET 
  157. task_techid = '$user[id]',
  158. taskid = '$id',
  159. completed = '-1',
  160. date = '$date'"
  161. );
  162. jump("viewtask.php?id=$id", 'Occurrence deleted. Viewing original event.');
  163. exit;
  164. } else {
  165. mistake("You don't have permission to edit this task.");
  166. }
  167. }
  168. // Fetch the techs assigned to this task
  169. $db->query("SELECT email_due, email_before1, email_before2, techid, 
  170. tech.username, completed FROM calendar_task_tech, tech where 
  171. calendar_task_tech.techid = tech.id and 
  172. calendar_task_tech.eventid = $id GROUP BY techid");
  173. if (!$rows = $db->num_rows()) {
  174. mistake('There are no technicians assigned to this task. Please try your request again.');
  175. }
  176. $taskassigns = array();
  177. while ($result = $db->row_array()) {
  178. $taskassigns[] = $result;
  179. }
  180. $detailstable[] = array($taskdata['description']);
  181. // Prepare the list of assigned techs
  182. $techstable = array();
  183. $techstable[] = array('<B>Technician</B>',
  184. '<B>Reminder Emails</B>',
  185. '<B>Completed?</B>');
  186. if ($date) {
  187. $db->query("SELECT * FROM calendar_task_iteration WHERE taskid = $id AND date = '$date'");
  188. while ($result = $db->row_array()) {
  189. $date_results[$result['task_techid']] = $result;
  190. }
  191. }
  192. foreach($taskassigns AS $assign) {
  193. if ($date) {
  194. if ($date_results[$assign['techid']]['completed']) { 
  195. $assign[completed] = "Yes";
  196. $taskdo = "incomplete";
  197. } else {
  198. $assign[completed] = "No";
  199. $taskdo = "complete";
  200. }
  201. } else {
  202. if ($assign[completed]) { 
  203. $assign[completed] = "Yes";
  204. $taskdo = "incomplete";
  205. } else {
  206. $assign[completed] = "No";
  207. $taskdo = "complete";
  208. }
  209. }
  210. $emails = 0;
  211. $mails = '';
  212. if ($assign['email_due']) {
  213. $mails = "On due date";
  214. $emails++;
  215. }
  216. if ($assign['email_before1']) {
  217. if ($emails) {
  218. $mails .= ", and $assign[email_before1] day(s) prior";
  219. } else {
  220. $mails = "$assign[email_before1] day(s) prior";
  221. }
  222. $emails++;
  223. }
  224. if (($assign['email_before2']) AND ($assign['email_before2'] != $assign['email_before1'])) {
  225. if ($emails) {
  226. $mails .= ", and $assign[email_before2] day(s) prior";
  227. } else {
  228. $mails = "$assign[email_before2] day(s) prior";
  229. }
  230. }
  231. if ($date) { // FOOO
  232. if ($taskdata['techmaker'] == $user['id'] OR ($assign[techid] == $user['id'])) {
  233. $url = "<A HREF="viewtask.php?do=$taskdo&id=$id&techid=$assign[techid]&date=$date">$assign[completed]</A>";
  234. } else {
  235. $url = $assign[completed];
  236. }
  237. } else {
  238. if ($taskdata['techmaker'] == $user['id'] OR ($assign[techid] == $user['id'])) {
  239. $url = "<A HREF="viewtask.php?do=$taskdo&id=$id&techid=$assign[techid]">$assign[completed]</A>";
  240. } else {
  241. $url = $assign[completed];
  242. }
  243. }
  244. $techstable[] = array($assign[username], $mails, $url);
  245. if ($assign['techid'] == $user['id']) { $showall++; }
  246. $techs++;
  247. }
  248. if ($taskdata['enddate'] == "0000-00-00") {
  249. $taskdata['enddate'] = "<I>N/A</I>";
  250. } else {
  251. $taskdata['enddate'] = convert_date($taskdata['enddate']);
  252. $taskdata['enddate'] = our_date($taskdata['enddate'], 'day');
  253. }
  254. if ($taskdata['endtime'] AND ($taskdata['endtime'] != '00:00:00')) {
  255. $taskdata['endtime'] = time_ampm($taskdata['endtime']);
  256. } else {
  257. $taskdata['endtime'] = '';
  258. }
  259. if ($taskdata['multistaff']) {
  260. $taskdata['multistaff'] = "Yes ($rows techs)";
  261. } else {
  262. $taskdata['multistaff'] = "No";
  263. }
  264. foreach($taskassigns AS $key) {
  265. if ($date) {
  266. $completed += $date_results[$key['techid']]['completed'];
  267. } else {
  268. $completed += $key['completed']; 
  269. }
  270. }
  271. if ($taskdata['globalcomplete']) {
  272. $taskdata['globalcomplete'] = "No";
  273. if ($completed) {
  274. $taskdata['completed'] = "Yes";
  275. } else {
  276. $taskdata['completed'] = "No";
  277. }
  278. } else {
  279. $taskdata['globalcomplete'] = "Yes";
  280. if ($completed == $rows) {
  281. $taskdata['completed'] = "Yes";
  282. $taskdo = "incomplete";
  283. } else {
  284. $taskdata['completed'] = "No";
  285. $taskdo = "complete";
  286. }
  287. }
  288. $taskdata['startdate'] = convert_date($taskdata['startdate']);
  289. if (isset($taskdata['starttime'])) {
  290. $starttime = time_ampm($taskdata['starttime']);
  291. $startdate = our_date($taskdata['startdate'], 'day') . " $starttime";
  292. } else {
  293. $startdate = our_date($taskdata['startdate'], 'day');
  294. }
  295. if ($showall AND ($techs > 1)) {
  296. if ($taskdata['techmaker'] == $user['id']) {
  297. $url = jprompt(
  298. 'This will update the completion status for all assigned techs.',
  299. "viewtask.php?do=$taskdo&id=$id&date=$date",
  300. $taskdata[completed]
  301. );
  302. } else {
  303. $url = $taskdata[completed];
  304. }
  305. } else {
  306. if ($taskdata['techmaker'] == $user['id']) {
  307. $url = "<A HREF="viewtask.php?do=$taskdo&id=$id&date=$date">$taskdata[completed]</A>";
  308. } else {
  309. $url = $taskdata[completed];
  310. }
  311. }
  312. if ($date AND (our_date($date) != $startdate)) {
  313. $orig = "(<A HREF="viewtask.php?id=$id">View Original Event</A>) (<A HREF="viewtask.php?do=mute&id=$id&date=$date">Hide This Occurrence</A>)";
  314. } else {
  315. $orig = '';
  316. }
  317. $reptype = repeat_type_text($taskdata['repeattype'], $taskdata['value1'], $taskdata['value2']);
  318. // Prepare the details table
  319. if ($reptype == "No") {
  320. $repdetail = NULL;
  321. $repends = NULL;
  322. } else {
  323. $repdetail = "<B>Repeat</B> $orig<BR>$reptype&nbsp;<A HREF="index.php?search=1&taskid=$taskdata[id]">View All</A>";
  324. $repends = "<B>Repeat Ends</B><BR>$taskdata[enddate] $taskdata[endtime]";
  325. }
  326. if ($taskdata['techmaker'] == $user['id']) {
  327. $url2 = "<A HREF="edit.php?id=$taskdata[id]">Edit</A>";
  328. }
  329. if ($showall AND ($techs > 1)) {
  330. $tmp = array("<B>Due Date</B><BR>$startdate", $repdetail, $repends,
  331. "<B>Creator</B><BR>$taskdata[techmaker_username]",
  332. "<B>Multiple Techs</B><BR>$taskdata[multistaff]",
  333. "<B>Everyone Must Finish</B><BR>$taskdata[globalcomplete]",
  334. "<B>Complete</B><BR>$url");
  335. if ($url2) {
  336. $tmp[] = $url2;
  337. }
  338. $detailstable[] = $tmp;
  339. } else {
  340. $tmp = array("<B>Start Date</B><BR>$startdate", $repdetail, $repends,
  341. "<B>Complete</B><BR>$url");
  342. if ($url2) {
  343. $tmp[] = $url2;
  344. }
  345. $detailstable[] = $tmp;
  346. }
  347. if ($event_due) {
  348. $detailstable[1][] = "<B>This Item Due</B><BR>$event_due";
  349. }
  350. // Emit the details table
  351. table_header("Task: $taskdata[title] (#$taskdata[id])");
  352. table_content('', $detailstable, '', '', '', '', $width);
  353. table_footer();
  354. // Emit the technicians list if appropriate
  355. if ($showall AND ($techs > 1)) {
  356. table_header("Technicians Assigned to This Task:");
  357. table_content('', $techstable, '', '', '', '', $width);
  358. table_footer();
  359. }
  360. tech_footer();
  361. ?>