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

电子政务应用

开发平台:

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: ticketreply.php,v $
  15. // | $Date: 2004/02/10 01:34:31 $
  16. // | $Revision: 1.45 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Ticket reply 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. $ticket = $db->query_return("SELECT * FROM ticket WHERE id = '$id'");
  30. $now = time();
  31. // check ticket exists
  32. if ($db->num_rows() < 0) {
  33. mistake('The ticket does not exist');
  34. }
  35. if (trim($_REQUEST['reply']) == '') {
  36. mistake('You did not enter any message');
  37. }
  38. ################## ADDING A NOTE ##################
  39. if ($_REQUEST['is_note'] == '1') {
  40. // no permission to reply
  41. if (!(p_ticket('edit'))) {
  42. nopermission('reply to this ticket');
  43. }
  44. // update ownership
  45. if ($_REQUEST['ownership']) {
  46. $db->query("SELECT tech FROM ticket WHERE id = '$id'");
  47. $tlog = $db->row_array();
  48. if ($tlog['tech'] != $user['id']) {
  49. ticketlog($ticket['id'], 'tech', $tlog['tech'], $user['id']);
  50. }
  51. $db->query("UPDATE ticket SET tech = '$user[id]' WHERE id = '$id'");
  52. }
  53. $reply = xss_check($_REQUEST['reply'], 'tech');
  54. $db->query("INSERT INTO ticket_notes SET
  55. date = '" . mktime() . "',
  56. techid = '$user[id]',
  57. ticketid = '$id',
  58. note = '" . mysql_escape_string($reply) . "'
  59. ");
  60. ticketlog($id, 'note', 0, 0, NULL, mysql_escape_string($_REQUEST['reply']), NULL);
  61. if ((int)$_REQUEST['searchid'] AND (int)$_REQUEST['num']) {
  62. jump("load_results.php?id=$id&searchid=$_REQUEST[searchid]&advance=1&num=".($_REQUEST['num'])."" target="footer", 'Note added to ticket');
  63. } else {
  64. jump("ticketview.php?id=$id", 'Note added to ticket');
  65. }
  66. }
  67. ################## REPLY TO TICKET ##################
  68. if ($_REQUEST['is_note'] != '1') {
  69. // closed ticket
  70. if ($ticket[is_open] == '0') {
  71. mistake('You can not reply to a closed ticket');
  72. }
  73. // no permission to reply
  74. if (!(p_ticket('edit'))) {
  75. nopermission('reply to this ticket');
  76. }
  77. if (!(trim($_REQUEST['reply']))) {
  78. mistake('A blank reply was submitted; please fill in a message and resubmit.');
  79. }
  80. // Check for duplicates
  81. $reply = xss_check($_REQUEST['reply'], 'tech');
  82. $db->query("SELECT id FROM ticket_message WHERE
  83. ticketid = '$id' AND
  84. message = '" . mysql_escape_string($reply) . "' AND
  85. techid = '$user[id]' AND
  86. date > '" . (mktime() - (60 * 10)) . "'
  87. ");
  88. if ($db->num_rows()) {
  89. mistake('Duplicate reply; this reply has already been submitted recently.');
  90. }
  91. // add ticket message
  92. $db->query("INSERT INTO ticket_message SET
  93. ticketid = '$id',
  94. message = '" . mysql_escape_string($reply) . "',
  95. date = '" . mktime() . "',
  96. techid = '$user[id]'
  97. ");
  98. // update ticket
  99. if ($_REQUEST['ownership']) {
  100. $db->query("SELECT tech FROM ticket WHERE id = '$id'");
  101. $tlog = $db->row_array();
  102. if ($tlog['tech'] != $user['id']) {
  103. ticketlog($ticket['id'], 'tech', $tlog['tech'], $user['id']);
  104. }
  105. }
  106. $now_ = mktime();
  107. $db->query("UPDATE ticket SET
  108. date_lastreply_tech = '$now_', " .
  109. iff($_REQUEST['awaitinguser'], " awaiting_tech = '0', date_awaiting_toggled = '" . mktime() . "', ") . 
  110. iff($_REQUEST['ownership'], " tech = '$user[id]', ") . 
  111. iff($_REQUEST['close'], " is_open = '0', date_closed = '$now_', ") . "
  112. lock_techid = '0',
  113. is_locked = '0',
  114. date_locked = '0'
  115. WHERE id = '$id'
  116. ");
  117. ticketlog($ticket[id], 'tech_replied');
  118. if ($_REQUEST['awaitinguser']) {
  119. ticketlog($ticket[id], 'awaiting_user');
  120. }
  121. if ($_REQUEST['close']) {
  122. ticketlog($ticket[id], 'close');
  123. }
  124. // get attachments
  125. $db->query("SELECT ticket_attachments.*, blobs.blobdata
  126. FROM ticket_attachments
  127. LEFT JOIN blobs ON (ticket_attachments.blobid = blobs.id)
  128. WHERE ticketid = '$id' AND
  129. toemail
  130. ");
  131. while ($result = $db->row_array()) {
  132. $didattachments = 1;
  133. $attachments[] = array(
  134. 'data' => $result[blobdata], 
  135. 'name' => $result[filename], 
  136. 'extension' => $result[extension]
  137. );
  138. }
  139. // log billing entry (if applicable)
  140. if ($settings['default_billable']) {
  141. $billable = 1;
  142. } else {
  143. $billable = 0;
  144. }
  145. if (!$_REQUEST['ignorebilling']) {
  146. if ($_REQUEST['charge'] OR $_REQUEST['hours'] OR $_REQUEST['minutes'] OR $_REQUEST['seconds']) {
  147. $time = ((int)$_REQUEST['hours'] * 3600) + ((int)$_REQUEST['minutes'] * 60) + (int)$_REQUEST['seconds'];
  148. if ($_REQUEST['charge']) {
  149. $charge = mysql_escape_string($_REQUEST['charge']);
  150. }
  151. if ($time OR ($_REQUEST['charge'] > 0)) {
  152. $db->query("INSERT INTO user_bill (userid, techid, ticketid, time, paid, billable, charge, stamp)
  153. VALUES ('$_REQUEST[userid]', '$user[id]', '$id', '$time', '0', '$billable', '$charge', '$now')");
  154. $details = array(
  155. 'charge' => $_REQUEST['charge'],
  156. 'time' => $time,
  157. 'billable' => $billable,
  158. 'paid' => 0
  159. );
  160. ticketlog($ticket['id'], 'billing_added', NULL, NULL, NULL, NULL, serialize($details));
  161. }
  162. }
  163. }
  164. // email the user
  165. if ($_REQUEST['emailuser']) {
  166. $user_data = $db->query_return("SELECT * FROM user WHERE id = '$ticket[userid]'");
  167. notify_user('reply_tech', $ticket, $user_data, $_REQUEST['reply'], $attachments);
  168. }
  169. if ($_REQUEST['mail_cc'] OR $_REQUEST['mail_digest']) {
  170. $mailother = split(',',$_REQUEST['cc']);
  171. if ($_REQUEST['mail_digest']) { // Generate the digest, put it in $message
  172. $db->query("SELECT id, username FROM user");
  173. while ($userdat = $db->row_array()) {
  174. $users[$userdat['id']] = $userdat['username'];
  175. }
  176. $db->query("SELECT id, username FROM tech");
  177. while ($techdat = $db->row_array()) {
  178. $techs[$techdat['id']] = $techdat['username'];
  179. }
  180. $db->query("SELECT id, message, date, techid, userid 
  181. FROM ticket_message WHERE ticketid = '$id' ORDER BY date");
  182. while ($messagedat = $db->row_array()) {
  183. if ($messagedat[userid]) {
  184. $origin = "user '" . $users[$messagedat[userid]] . "'";
  185. } else {
  186. $origin = "tech '" . $techs[$messagedat[techid]] . "'";
  187. }
  188. $digest .= "From $origin:n--- " . our_date($messagedat[date],'full') . " ---n$messagedat[message]nn";
  189. }
  190. }
  191. $pri = $db->query_return("
  192. SELECT ticket_pri.name 
  193. FROM ticket, 
  194. ticket_pri 
  195. WHERE ticket.id = '$id'
  196. AND ticket.priority = ticket_pri.id");
  197. $cat = $db->query_return("
  198. SELECT ticket_cat.name 
  199. FROM ticket, 
  200. ticket_cat 
  201. WHERE ticket.id = '$id'
  202. AND ticket.category = ticket_cat.id");
  203. $tech_email = $user['email'];
  204. $reply = $_REQUEST['reply'];
  205. if ($_REQUEST['mail_cc']) {
  206. eval(makeemaileval('cc_message', 'BODY_cc', $subject, $ticket));
  207. }
  208. if ($_REQUEST['mail_digest']) {
  209. eval(makeemaileval('digest_message', 'TECHBODY_digest', $subject, $ticket));
  210. }
  211. foreach ($mailother AS $key => $val) {
  212. if (validate_email($val)) {
  213. if ($_REQUEST['mail_cc']) {
  214. $ccs[] = $val;
  215. dp_mail($val, "CC'd response -- Ticket #$ticket[id] -- $subject", $cc_message);
  216. }
  217. if ($_REQUEST['mail_digest']) {
  218. $digests[] = $val;
  219. dp_mail($val, "Digest -- Ticket #$ticket[id] -- $subject", $digest_message);
  220. }
  221. }
  222. }
  223. if ($_REQUEST['mail_cc']) {
  224. $ccs = serialize($ccs);
  225. ticketlog($id, 'cc', NULL, NULL, "Subject: CC'd response -- Ticket #$ticket[id] -- $subject", NULL, $ccs);
  226. }
  227. if ($_REQUEST['mail_digest']) {
  228. $digests = serialize($digests);
  229. ticketlog($id, 'digest', NULL, NULL, "Subject: Digest -- Ticket #$ticket[id] -- $subject", NULL, $digests);
  230. }
  231. }
  232. // don't send attachments again
  233. if ($didattachments) {
  234. $db->query("UPDATE ticket_attachments SET 
  235. toemail = 0
  236. WHERE ticketid = '$id' AND
  237. toemail
  238. ");
  239. }
  240. if ((int)$_REQUEST['searchid'] AND (int)$_REQUEST['num']) {
  241. jump("load_results.php?id=$id&searchid=$_REQUEST[searchid]&advance=1&num=".($_REQUEST['num'])."" target="footer", 'Reply sent');
  242. } elseif ($_REQUEST['makefaq']) {
  243. $answer = $_REQUEST['reply'];
  244. $question = $db->query_return("SELECT message FROM ticket_message WHERE ticketid = '$ticket[id]' ORDER BY date LIMIT 1");
  245. $question = $question['message'];
  246. $title = $db->query_return("SELECT subject FROM ticket WHERE id = '$ticket[id]'");
  247. $title = $title['subject'];
  248. jump("../faq/view.php?do=add&title=$title&question=$question&answer=$answer", 'Ticket Created. Redirecting you to the FAQ article addition page.');
  249. } else {
  250. jump("ticketview.php?id=$id", 'Reply sent');
  251. }
  252. }