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

电子政务应用

开发平台:

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: ticketactions.php,v $
  15. // | $Date: 2004/02/10 01:34:30 $
  16. // | $Revision: 1.72 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Ticket actions handler.
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. // start file
  23. require("./../global.php");
  24. // globalise variables
  25. $global = array (
  26. array('id') // ticketid
  27. );
  28. rg($global);
  29. /***********************************************************
  30. MASS TICKET PROCESSING
  31. ************************************************************/
  32. ############################### PROCESS TICKETS ###############################
  33. $now_ = mktime();
  34. if ($_REQUEST['do'] == "process") {
  35. new_db_class('2');
  36. /***********************************************************
  37. GET SOME DATA
  38. ************************************************************/
  39. $db->query("SELECT id, name FROM ticket_cat");
  40. while ($result = $db->row_array()) {
  41. $cats[] = $result[id];
  42. $catsname[$result[id]] = $result[name];
  43. }
  44. $db->query("SELECT id, name FROM ticket_pri");
  45. while ($result = $db->row_array()) {
  46. $pris[] = $result[id];
  47. $prisname[$result[id]] = $result[name];
  48. }
  49. $db->query("SELECT id, username FROM tech");
  50. while ($result = $db->row_array()) {
  51. $techs[] = $result[id];
  52. $techsname[$result[id]] = $result[username];
  53. }
  54. /***********************************************************
  55. PROCESS TICKETS
  56. ************************************************************/
  57. // build up list of ticket ids
  58. foreach ($_REQUEST AS $key => $var) {
  59. $tmp = strpos($key, 'OPT');
  60. if (($tmp !== false) AND ($var != 'Select one')) {
  61. $ticketid = substr($key, 3); // get ticketid
  62. $tickets[] = $ticketid;
  63. $toprocess[$ticketid] = array(
  64. 'type' => $var, 
  65. 'value' => $_REQUEST['SO' . $ticketid]
  66. );
  67. }
  68. }
  69. if (!is_array($tickets)) {
  70. form_jump('ticketsearch.php', 'You did not make any changes to tickets', array('searchtype' => $_REQUEST['searchtype'], 'variables' => $_REQUEST['variables']));
  71. }
  72. // get ticket data
  73. $tickets = $db->query_return_array("SELECT ticket.*, user.email AS email FROM ticket LEFT JOIN user ON user.id = ticket.userid WHERE ticket.id IN " . array2sql($tickets) . "");
  74. if ($db->num_rows()) {
  75. foreach($tickets AS $ticket) { 
  76. if ($toprocess[$ticket[id]]['type'] == 'category') { // category
  77. if (p_ticket('edit') AND in_array($toprocess[$ticket[id]]['value'], $cats)) {
  78. $tlog = $db->query_return("SELECT category FROM ticket WHERE id = '$ticket[id]'");
  79. $db->query("UPDATE ticket SET category = '" . $toprocess[$ticket[id]]['value'] . "' WHERE id = '$ticket[id]'");
  80. if ($db->affected_rows()) {
  81. $message .= "Ticket $ticket[id] category changed to " . $catsname[$toprocess[$ticket[id]]['value']] . '\n';
  82. ticketlog($id, 'category', $tlog[category], $toprocess[$ticket[id]]['value']);
  83. } else {
  84. $message .= "Ticket $ticket[id] category already " . $catsname[$toprocess[$ticket[id]]['value']] . '\n';
  85. }
  86. }
  87. } elseif ($toprocess[$ticket[id]]['type'] == 'priority') { // priority
  88. if (p_ticket('edit') AND in_array($toprocess[$ticket[id]]['value'], $pris)) {
  89. $tlog = $db->query_return("SELECT priority FROM ticket WHERE id = '$ticket[id]'");
  90. $db->query("UPDATE ticket SET priority = '" . $toprocess[$ticket[id]]['value'] . "' WHERE id = '$ticket[id]'");
  91. if ($db->affected_rows()) {
  92. $message .= "Ticket $ticket[id] priority changed to " . $prisname[$toprocess[$ticket[id]]['value']] . '\n';
  93. ticketlog($id, 'priority', $tlog[priority], $toprocess[$ticket[id]]['value']);
  94. } else {
  95. $message .= "Ticket $ticket[id] priority already " . $prisname[$toprocess[$ticket[id]]['value']] . '\n';
  96. }
  97. }
  98. } elseif ($toprocess[$ticket[id]]['type'] == 'tech') { // tech
  99. if (p_ticket('edit') AND in_array($toprocess[$ticket[id]]['value'], $techs)) {
  100. $tlog = $db->query_return("SELECT tech FROM ticket WHERE id = '$ticket[id]'");
  101. $db->query("UPDATE ticket SET tech = '" . $toprocess[$ticket[id]]['value'] . "' WHERE id = '$ticket[id]'");
  102. if ($db->affected_rows()) {
  103. $message .= "Ticket $ticket[id] assigned to " . $techsname[$toprocess[$ticket[id]]['value']] . '\n';
  104. ticketlog($id, 'tech', $tlog[tech], $toprocess[$ticket[id]]['value']);
  105. notify_technicians('assigned', $ticket, $user, NULL, NULL);
  106. } else {
  107. $message .= "Ticket $ticket[id] is already assigned to " . $techsname[$toprocess[$ticket[id]]['value']]. '\n';
  108. }
  109. }
  110. } elseif ($toprocess[$ticket[id]]['type'] == 'open') { // open
  111. if (p_ticket('open')) {
  112. $open_tickets[] = $ticket[id];
  113. $message .= "Ticket $ticket[id] reopened\n";
  114. }
  115. } elseif ($toprocess[$ticket[id]]['type'] == 'close') { // close
  116. if (p_ticket('close')) {
  117. $close_tickets[] = $ticket[id];
  118. $message .= "Ticket $ticket[id] closed\n";
  119. }
  120. } elseif ($toprocess[$ticket[id]]['type'] == 'awaiting_user') { // awaiting_user
  121. if (p_ticket('edit')) {
  122. $awaiting_user[] = $ticket[id];
  123. $message .= "Ticket $ticket[id] set as awaiting user response\n";
  124. }
  125. } elseif ($toprocess[$ticket[id]]['type'] == 'awaiting_tech') { // awaiting_tech
  126. if (p_ticket('edit')) {
  127. $awaiting_tech[] = $ticket[id];
  128. $message .= "Ticket $ticket[id] set as awaiting tech response\n";
  129. }
  130. } elseif ($toprocess[$ticket[id]]['type'] == 'nospam') { // awaiting_tech
  131. if (p_ticket('edit')) {
  132. $db->query("UPDATE ticket SET nodisplay = 0 WHERE id = '$ticket[id]'");
  133. $message .= "Ticket $ticket[id]'s spam flag removed\n";
  134. }
  135. } elseif ($toprocess[$ticket[id]]['type'] == 'spam') { // awaiting_tech
  136. if (p_ticket('edit')) {
  137. $db->query("UPDATE ticket SET nodisplay = 1 WHERE id = '$ticket[id]'");
  138. $message .= "Ticket $ticket[id]'s spam flag set\n";
  139. }
  140. } elseif ($toprocess[$ticket[id]]['type'] == 'delete') { // delete (permission check is done by ticket_delete())
  141. $delete_tickets[] = $ticket[id];
  142. if ($toprocess[$ticket[id]]['value'] == '2') { // Ban e-mail as well
  143. ban_email($_REQUEST['email']);
  144. }
  145. } elseif ($toprocess[$ticket[id]]['type'] == 'nuke') { // Delete ticket, delete user, and ban e-mail
  146. if (p_ticket('delete') AND ($user['p_delete_users'] OR $user['admin'])) {
  147. $nukes[] = array('userid' => $ticket[userid], 'email' => $ticket[email]);
  148. $message .= "$ticket[email] deleted/banned; tickets purged\n";
  149. }
  150. } elseif ($toprocess[$ticket[id]]['type'] == 'quickreply') { // awaiting_tech
  151. if (p_ticket('edit')) {
  152. if ($reply = $db->query_return("SELECT quickreply.*, quickreply_cat.global FROM quickreply LEFT JOIN quickreply_cat ON quickreply.category = quickreply_cat.id WHERE quickreply.id = '" . $toprocess[$ticket[id]]['value'] . "' AND (quickreply_cat.global OR quickreply.techid = '$user[id]')")) {
  153. $reply_body = $reply['response'] . iff($user['signature'], "nn--n$user[signature]");
  154. $db->query("INSERT INTO ticket_message SET
  155. ticketid = '$ticket[id]',
  156. message = '" . mysql_escape_string($reply_body) . "',
  157. date = '$now_',
  158. techid = '$user[id]'
  159. ");
  160. $db->query("UPDATE ticket SET
  161. date_lastreply_tech = '$now_',
  162. awaiting_tech = 0, date_awaiting_toggled = '" . mktime() . "'
  163. WHERE id = '$ticket[id]'");
  164. ticketlog($ticket[id], 'tech_replied');
  165. $user_data = $db->query_return("SELECT * FROM user WHERE id = '$ticket[userid]'");
  166. notify_user('reply_user', $ticket, $user_data, $reply_body);
  167. $replied = $ticket[id];
  168. $message .= "Replied to $ticket[id]\n";
  169. }
  170. }
  171. }
  172. }
  173. }
  174. /***********************************************************
  175. UPDATE TICKETS
  176. ************************************************************/
  177. // open / close / awaiting tech / awaiting user
  178. if (is_array($open_tickets)) {
  179. $db->query("UPDATE ticket SET is_open = '1' WHERE id IN " . array2sql($open_tickets) . "");
  180. foreach ($open_tickets AS $key => $val) {
  181. ticketlog($val, 'reopen');
  182. }
  183. }
  184. if (is_array($close_tickets)){ 
  185. $db->query("UPDATE ticket SET is_open = '0', date_closed = '" . mktime() . "' WHERE id IN " . array2sql($close_tickets) . "");
  186. foreach ($close_tickets AS $key => $val) {
  187. ticketlog($val, 'close');
  188. }
  189. }
  190. if (is_array($awaiting_tech)) {
  191. $db->query("UPDATE ticket SET awaiting_tech = '1', date_awaiting_toggled = '" . mktime() . "' WHERE id IN " . array2sql($awaiting_tech) . "");
  192. foreach ($awaiting_tech AS $key => $val) {
  193. ticketlog($val, 'awaiting_tech');
  194. }
  195. }
  196. if (is_array($awaiting_user)) {
  197. $db->query("UPDATE ticket SET awaiting_tech = '0', date_awaiting_toggled = '" . mktime() . "' WHERE id IN " . array2sql($awaiting_user) . "");
  198. foreach ($awaiting_user AS $key => $val) {
  199. ticketlog($val, 'awaiting_user');
  200. }
  201. }
  202. if (is_array($delete_tickets)) {
  203. $res = ticket_delete($delete_tickets);
  204. if (count($res[0])) {
  205. foreach ($res[0] AS $val) {
  206. $message .= "No permission to delete ticket #$val.\n";
  207. }
  208. }
  209. if (count($res[1])) {
  210. foreach ($res[1] AS $val) {
  211. $message .= "Ticket #$val deleted.\n";
  212. }
  213. } else {
  214. $message .= "No tickets deleted.\n";
  215. }
  216. }
  217. if (is_array($nukes)) {
  218. foreach ($nukes AS $key => $val) {
  219. ban_email($val['email']);
  220. $del_users[] = $val['userid'];
  221. }
  222. user_delete($del_users);
  223. }
  224. /***********************************************************
  225. FINISH UP & REDIRECT
  226. ************************************************************/
  227. form_jump('ticketsearch.php', $message, array('searchtype' => $_REQUEST['searchtype'], 'variables' => $_REQUEST['variables']));
  228. }
  229. /***********************************************************
  230. INDIVIDUAL TICKET PROCESSING
  231. ************************************************************/
  232. $ticket = $db->query_return("SELECT * FROM ticket WHERE id = '$id'");
  233. ############################### BAN E-MAIL ################################
  234. if ($_REQUEST['do'] == 'nuke') {
  235. if ($user['p_delete_users']) {
  236. $userdata = $db->query_return("SELECT * FROM user WHERE id = '$ticket[userid]'");
  237. user_delete($ticket['userid']);
  238. ban_email($userdata['email']);
  239. }
  240. jump("../home/main.php", "The user has been banned, deleted, and the user's tickets have been deleted.");
  241. }
  242. if ($_REQUEST['do'] == 'banmail' AND $_REQUEST['email']) {
  243. if (!$user['p_edit_users']) {
  244. mistake("You do not have permission to ban users.");
  245. exit;
  246. }
  247. ban_email($_REQUEST['email']);
  248. jump("ticketview.php?id=$id", "The e-mail address has been added to the banned list.");
  249. }
  250. ############################### STORE TICKET ###############################
  251. if ($_REQUEST['do'] == "store" AND p_ticket('view')) {
  252. $db->query("DELETE FROM tech_ticket_save WHERE ticketid = $id AND techid = '$user[id]'");
  253. $db->query("INSERT INTO tech_ticket_save (ticketid, techid) VALUES ('$id', '$user[id]')");
  254. jump("ticketview.php?id=$id", "Ticket has been saved in your saved list.");
  255. }
  256. ############################### UN-STORE TICKET ###############################
  257. if ($_REQUEST['do'] == "unstore" AND p_ticket('view')) {
  258. $db->query("DELETE FROM tech_ticket_save WHERE ticketid = '$id' AND techid = '$user[id]'");
  259. jump("ticketview.php?id=$id", "Ticket has been removed from your saved list.");
  260. }
  261. ############################### FLAG TICKET AS SPAM ###############################
  262. if ($_REQUEST['do'] == "spam" AND p_ticket('edit')) {
  263. $db->query("UPDATE ticket set nodisplay = 1 WHERE id = '$id'");
  264. ticketlog($id, 'spam');
  265. jump("ticketview.php?id=$id", "Ticket has been marked as spam.");
  266. }
  267. ############################### FLAG TICKET AS NOT SPAM ###############################
  268. if ($_REQUEST['do'] == "nospam" AND p_ticket('edit')) {
  269. $db->query("UPDATE ticket set nodisplay = 0 WHERE id = '$id'");
  270. ticketlog($id, 'nonspam');
  271. jump("ticketview.php?id=$id", "Ticket has been marked as non-spam.");
  272. }
  273. ############################### LOCK TICKET ###############################
  274. if ($_REQUEST['do'] == "lock" AND p_ticket('edit')) {
  275. if (p_ticket('edit')) {
  276. $db->query("
  277. UPDATE ticket SET is_locked = 1, 
  278. date_locked = '" . mktime() . "' 
  279. WHERE id = '$id'
  280. ");
  281. ticketlog($id, 'lock');
  282. jump("ticketview.php?id=$id", "Ticket has been locked");
  283. } else {
  284. nopermission('to lock this ticket');
  285. }
  286. }
  287. ############################### UNLOCK TICKET ###############################
  288. if ($_REQUEST['do'] == "unlock" AND p_ticket('edit')) {
  289. if (p_ticket('edit')) {
  290. $db->query("UPDATE ticket SET is_locked = 0, date_locked = 0 WHERE id = '$id'");
  291. ticketlog($id, 'unlock');
  292. jump("ticketview.php?id=$id", "Ticket has been unlocked");
  293. } else {
  294. nopermission('to lock this ticket');
  295. }
  296. }
  297. ############################### SET AS AWAITING TECH ###############################
  298. if ($_REQUEST['do'] == "awaiting_tech" AND p_ticket('edit')) {
  299. if (p_ticket('edit')) {
  300. $db->query("UPDATE ticket SET awaiting_tech = 1, date_awaiting_toggled = '" . mktime() . "' WHERE id = '$id'");
  301. ticketlog($id, 'awaiting_tech');
  302. jump("ticketview.php?id=$id", "Ticket has been set as awaiting a technician's response");
  303. } else {
  304. nopermission('to edit this ticket');
  305. }
  306. }
  307. ############################### SET AS AWAITING USER ###############################
  308. if ($_REQUEST['do'] == "awaiting_user" AND p_ticket('edit')) {
  309. if (p_ticket('edit')) {
  310. $db->query("UPDATE ticket SET awaiting_tech = 0, date_awaiting_toggled = '" . mktime() . "' WHERE id = '$id'");
  311. ticketlog($id, 'awaiting_user');
  312. jump("ticketview.php?id=$id", "Ticket has been set as awaiting a user's response");
  313. } else {
  314. nopermission('to edit this ticket');
  315. }
  316. }
  317. ############################### REMOVE OWNERSHIP ###############################
  318. if ($_REQUEST['do'] == "remove_ownership" AND p_ticket('edit')) {
  319. if (p_ticket('edit')) {
  320. $db->query("UPDATE ticket SET tech = 0 WHERE id = '$id'");
  321. ticketlog($id, 'tech', $uuser[id], 0);
  322. jump("ticketview.php?id=$id", "Your ownership to this ticket has been removed");
  323. exit;
  324. } else {
  325. nopermission('to edit this ticket');
  326. }
  327. }
  328. ############################### TAKE OWNERSHIP ###############################
  329. if ($_REQUEST['do'] == "take_ownership" AND p_ticket('edit')) {
  330. if (p_ticket('edit')) {
  331. $db->query("UPDATE ticket SET tech = $user[id] WHERE id = '$id'");
  332. ticketlog($id, 'tech', $ticket[tech], $user[id]);
  333. jump("ticketview.php?id=$id", "You have been assigned ownership of this ticket");
  334. exit;
  335. } else {
  336. nopermission('to edit this ticket');
  337. }
  338. }
  339. ############################### CLOSE TICKET ###############################
  340. if ($_REQUEST['do'] == "close") {
  341. if (p_ticket('close')) {
  342. $db->query("UPDATE ticket SET is_open = 0, date_closed = '$now_' WHERE id = '$id'");
  343. ticketlog($id, 'close');
  344. if ($_REQUEST[email] == '1') {
  345. $ticket = $db->query_return("SELECT * FROM ticket WHERE id = '$id'");
  346. $user_details = $db->query_return("SELECT * FROM user WHERE id = '$ticket[userid]'");
  347. $user_details = update_user_details($user_details);
  348. eval(makeemaileval('message', 'BODY_question_closed', $subject, $ticket));
  349. dp_mail($user_details['email'], $subject, trim($message));
  350. ticketlog($ticket['id'], 'email_sent_to_user', NULL, NULL, "To: $user_details[email], Subject: $subject");
  351. }
  352. jump("ticketview.php?id=$id", "The ticket has been closed");
  353. }
  354. }
  355. ############################### OPEN TICKET ###############################
  356. if ($_REQUEST['do'] == "open") {
  357. if (p_ticket('close')) {
  358. ticketlog($id, 'reopen');
  359. $db->query("UPDATE ticket SET is_open = 1 WHERE id = '$id'");
  360. if ($_REQUEST[email] == '1') {
  361. $ticket = $db->query_return("SELECT * FROM ticket WHERE id = '$id'");
  362. $user_details = $db->query_return("SELECT * FROM user WHERE id = '$ticket[userid]'");
  363. unset($user_details['password']);
  364. $user_details = update_user_details($user_details);
  365. eval(makeemaileval('message', 'BODY_question_reopened', $subject, $ticket));
  366. dp_mail($user_details['email'], $subject, trim($message));
  367. ticketlog($ticket['id'], 'email_sent_to_user', NULL, NULL, "To: $user_details[email], Subject: $subject");
  368. }
  369. jump("ticketview.php?id=$id", "The ticket has been reopened");
  370. } else {
  371. jump("ticketview.php?id=$id", "You don't have permission to re-open this ticket.");
  372. }
  373. }
  374. ############################### DELETE ###############################
  375. if ($_REQUEST['do'] == "delete") {
  376. if (p_ticket('delete')) {
  377. ticket_delete(array($id));
  378. } else {
  379. nopermission('to delete this ticket');
  380. }
  381. jump("../home/main.php", 'The ticket has been deleted.');
  382. }
  383. ############################### MERGE TICKET ###############################
  384. if ($_REQUEST['do'] == "merge" ) {
  385. $fromticket = mysql_escape_string($_REQUEST['fromticket']);
  386. $toticket = mysql_escape_string($_REQUEST['toticket']);
  387. if ($fromticket AND $toticket) {
  388. $ticket_del = $db->query_return("SELECT * FROM ticket WHERE id = '$fromticket'");
  389. $ticket_stay = $db->query_return("SELECT * FROM ticket WHERE id = '$toticket'");
  390. } else {
  391. jump("ticketview.php?id=$ticket_stay[id]", 'Two tickets must be specified
  392. to merge.');
  393. }
  394. // need permission to edit both of these tickets.
  395. if (p_ticket('edit', $ticket_del) AND
  396. p_ticket('delete', $ticket_del) AND
  397. p_ticket('edit', $ticket_stay)) {
  398. // check that the user is the same, or error and jump back
  399. if ($ticket_del[userid] != $ticket_stay[userid]) {
  400. jump("ticketview.php?id=$ticket_stay[id]", 'The tickets belong to different
  401. users and cannot be merged.');
  402. }
  403. // update ticketids for various tables
  404. $db->query("UPDATE ticket_message SET ticketid = '$ticket_stay[id]'
  405. WHERE ticketid = '$ticket_del[id]'");
  406. $db->query("UPDATE ticket_attachments SET ticketid = '$ticket_stay[id]'
  407. WHERE ticketid = '$ticket_del[id]'");
  408. $db->query("UPDATE ticket_notes SET ticketid = '$ticket_stay[id]' 
  409. WHERE ticketid = '$ticket_del[id]'");
  410. $db->query("UPDATE user_bill SET ticketid = '$ticket_stay[id]' 
  411. WHERE ticketid = '$ticket_del[id]'");
  412. $db->query("UPDATE tech_ticket_watch SET ticketid = '$ticket_stay[id]' WHERE ticketid = '$ticket_del[id]'");
  413. $db->query("SELECT ticketid FROM tech_ticket_save WHERE ticketid = '$ticket_stay[id]'");
  414. if (!($db->num_rows())) { // Only move a saved ticket to the saved list if the receiving ticket isn't already saved
  415. $db->query("UPDATE tech_ticket_save SET ticketid = '$ticket_stay[id]' WHERE ticketid = '$ticket_del[id]'");
  416. }
  417. $db->query("INSERT INTO ticket_merge SET old_id = '$ticket_del[id]', old_ref = '$ticket_del[ref]', new_id = '$ticket_stay[id]', new_ref = '$ticket_stay[ref]'");
  418. // delete merged ticket
  419. $db->query("DELETE FROM ticket WHERE id = '$fromticket'");
  420. ticketlog($toticket, 'merge', $fromticket, $toticket);
  421. jump("ticketview.php?id=$ticket_stay[id]", 'Ticket Merged');
  422. } else {
  423. jump("ticketview.php?id=$ticket_stay[id]", 'You don't have permission to edit
  424. both tickets (or permission to delete the ticket to be merged');
  425. }
  426. }
  427. ######################### USER AUTORESPONDS TOGGLE #####################################
  428. if ($_REQUEST['do'] == 'autoresp') {
  429. if ($user['p_edit_users']) {
  430. if ($_REQUEST['userid']) {
  431. $db->query('UPDATE user SET autoresponds = ' . iff($_REQUEST['val'], 1, 0) . ' WHERE id = '' . $_REQUEST['userid'] . "'");
  432. jump("ticketview.php?id=$id", 'User updated.');
  433. } else {
  434. mistake('No user ID specified.');
  435. }
  436. } else {
  437. mistake('You do not have permission to edit users.');
  438. }
  439. }
  440. ?>