newticket.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: newticket.php,v $
  15. // | $Date: 2004/02/11 01:28:16 $
  16. // | $Revision: 1.86 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - New ticket creation page.
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. include "./../global.php";
  23. tech_nav('tickets');
  24. // default do
  25. $_REQUEST['do'] = trim($_REQUEST['do']);
  26. if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
  27. $_REQUEST['do'] = "start";
  28. }
  29. max_limits('tickets');
  30. ############################### PROCESS NEW TICKET ###############################
  31. /********************** NEW USER ************************/
  32. if ($_REQUEST['do'] == "new") {
  33. if ($_REQUEST['new_user'] == 'new') {
  34. if (!$user['p_create_users']) {
  35. mistake("You don't have permission to create new users.", 1);
  36. }
  37. $_REQUEST['username'] = trim($_REQUEST['username']);
  38. $_REQUEST['email'] = trim($_REQUEST['email']);
  39. // password
  40. if (!$_REQUEST['password']) { 
  41. $_REQUEST['password'] = make_pass(8);
  42. $_REQUEST['password1'] = $_REQUEST['password'];
  43. } elseif ($_REQUEST['password'] != $_REQUEST['password1']) {
  44. unset($_REQUEST['password'], $_REQUEST['password1']);
  45. $error .= "The passwords you have entered do not match.n";
  46. }
  47. // empty email
  48. if (!validate_email($_REQUEST['email'])) { 
  49. $error .= "You have not entered a valid email address.n";
  50. }
  51. // empty username
  52. if (!$_REQUEST['username']) { 
  53. $newusername = 1;
  54. $_REQUEST['username'] = make_username($_REQUEST['email']);
  55. // username in use
  56. } else { 
  57. $db->query("
  58. SELECT id 
  59. FROM user 
  60. WHERE username = '" . mysql_escape_string($_REQUEST[username]) . "'
  61. ");
  62. if ($db->num_rows() > 0) {
  63. $message .= "The username you entered is already in use. Please enter another one.n";
  64. }
  65. }
  66. // email in use
  67. $db->query("
  68. SELECT username, id 
  69. FROM user 
  70. WHERE email = '" . mysql_escape_string($_REQUEST[email]) . "'
  71. ");
  72. if ($db->num_rows() > 0) { 
  73. $result = $db->row_array();
  74. $error .= "The email address you entered is already in use by $result[username] (userid $result[id]).n";
  75. }
  76. $db->query("
  77. SELECT userid 
  78. FROM user_email 
  79. WHERE email = '" . mysql_escape_string($_REQUEST['email']) . "'
  80. ");
  81. if ($db->num_rows() > 0) {
  82. $error .= "There is already a user with the email address $_REQUEST[user].n";
  83. }
  84. $password_cookie = md5($_REQUEST[password] . uniqid(rand(),1));
  85. $password_cookie = substr($password_cookie, 0, 8);
  86. $password_url = md5($password . uniqid(rand(),1) . $session[sessionid]);
  87. $password_url = substr($password_url, 0, 8);
  88. $query = "INSERT INTO user SET 
  89. email = '$_REQUEST[email]',
  90. password = '$_REQUEST[password]',
  91. password_cookie = '" . mysql_escape_string($password_cookie) . "',
  92. password_url = '" . mysql_escape_string($password_url) . "',
  93. username = '$_REQUEST[username]',
  94. date_registered = '" . mktime() . "'";
  95. // get the fields that we are expecting to be created
  96. $db->query("SELECT * FROM user_def WHERE tech_editable");
  97. while ($user_fields = $db->row_array()) {
  98. $data = field_def_val($user_fields, $_REQUEST[userfields][$user_fields[name]], $_REQUEST[userfields]["extra" . $user_fields[name]]);
  99. $query .= ", $user_fields[name] = '" . mysql_escape_string($_REQUEST["userfields[$user_fields[name]"]) . "'";
  100. }
  101. // run the query
  102. if (!$error) { 
  103. $db->query($query);
  104. $userid = $db->last_id();
  105. $user_details = $db->query_return("SELECT * FROM user WHERE id = '$userid'");
  106. $user_created = 1;
  107. }
  108. /********************** CURRENT USER ************************/
  109. } else {
  110. // from select menu
  111. if ($_REQUEST['userchoice'] > 0) {
  112. $user_details = $db->query_return("
  113. SELECT *
  114. FROM user
  115. WHERE id = '$_REQUEST[userchoice]'  
  116. AND !disabled
  117. ");
  118. if ($db->num_rows() < 1) {
  119. $error .= "The user you selected was not found or has been disabled.n";
  120. }
  121. // entered username / email address
  122. } elseif ($_REQUEST['oldusername']) { 
  123. $user_details = $db->query_return("
  124. SELECT *
  125. FROM user 
  126. WHERE username = '" . mysql_escape_string($_REQUEST['oldusername']) . "' 
  127. OR email = '" . mysql_escape_string($_REQUEST['oldusername'])  . "' 
  128. AND !disabled 
  129. AND email != '' 
  130. AND username != ''
  131. ");
  132. if (!$db->num_rows()) {
  133. $error .= "There was no user found with a username or email address of $_REQUEST[oldusername].n";
  134. }
  135. }
  136. }
  137. /******************** TICKET CHECKS ******************/
  138. if (!$error) { // errors from user checks
  139. if (!$_REQUEST['usermessage'] AND !$_REQUEST['reply']) { // check message
  140. $error .= "You have not entered either a user message or a tech message for this ticket.n";
  141. }
  142. if (!$_REQUEST['subject']) { // check subject
  143. $error .= "You have not entered a subject for this ticket.n";
  144. }
  145. if (!$_REQUEST['ticket_category']) { // check category
  146. $error .= "You have not entered a category for this ticket.n";
  147. }
  148. }
  149. /******************** CREATE TICKET ******************/
  150. // errors from user / ticket checks
  151. if (!$error) { 
  152. if ($_REQUEST['set_awaiting_user']) {
  153. $await = 0;
  154. } else {
  155. $await = 1;
  156. }
  157. $authcode = substr(md5(rand(0,100000) . mktime()), 0, 8);
  158. $subject = xss_check($_REQUEST['subject'], 'user');
  159. if (!$_REQUEST['close_ticket']) {
  160. $open = 1;
  161. }
  162. $query = "INSERT INTO ticket SET 
  163. category = '" . mysql_escape_string($_REQUEST[ticket_category]) . "',
  164. priority = '" . mysql_escape_string($_REQUEST[priority]) . "',
  165. subject = '" . mysql_escape_string($subject) . "',
  166. userid = '$user_details[id]',
  167. is_open = '$open',
  168. awaiting_tech = '$await',
  169. date_awaiting_toggled = '" . mktime() . "',
  170. date_opened = '" . mktime() . "',
  171. date_lastreply_tech = '" . mktime() . "',
  172. date_lastreply = '" . mktime() . "',
  173. ref = '" . make_ticket_ref() . "', 
  174. authcode = '$authcode', ";
  175. if(!$open) {
  176. $query .= "date_closed = unix_timestamp(), ";
  177. }
  178. if ($_REQUEST['tech']) {
  179. $query .= "tech = '$_REQUEST[tech]' ";
  180. } elseif ($cat_data['auto_assign_tech']) {
  181. $query .= "tech = '$cat_data[auto_assign_tech]' ";
  182. } else {
  183. $query .= "tech = 0 ";
  184. }
  185. $db->query("select * from ticket_def");
  186. while ($ticket_fields = $db->row_array()) {
  187. $data = field_def_val($ticket_fields, $_REQUEST[ticket_fields][$ticket_fields[name]], $_REQUEST[ticket_fields]["extra" . $ticket_fields[name]]);
  188. $query .= ", $ticket_fields[name] = '" . mysql_escape_string($data) . "' ";
  189. }
  190. // add new thread to database and get back id
  191. $db->query($query);
  192. $id = $db->last_id();
  193. // Add an entry to the ticket log
  194. ticketlog($id, 'created');
  195. if (!$open) {
  196. ticketlog($id, 'close');
  197. }
  198. /////////////////////// ADD MESSAGES TO DATABASE ///////////////////////
  199. if ($_REQUEST['usermessage']) {
  200. $usermessage = xss_check($_REQUEST['usermessage'], 'user');
  201. $db->query("INSERT INTO ticket_message SET
  202. message = '" . mysql_escape_string($usermessage) . "',
  203. ticketid = '$id',
  204. userid = '$user_details[id]',
  205. date = '" . mktime() . "'
  206. ");
  207. }
  208. if ($_REQUEST['reply']) {
  209. $reply = xss_check($_REQUEST['reply'], 'user');
  210. $db->query("INSERT INTO ticket_message SET
  211. message = '" . mysql_escape_string($reply) . "',
  212. ticketid = '$id',
  213. techid = '$user[id]',
  214. date = '" . mktime() . "'
  215. ");
  216. }
  217. $ticket = $db->query_return("SELECT * FROM ticket WHERE id = '$id'");
  218. $added = array();
  219. if (is_array($_FILES)) {
  220. foreach ($_FILES AS $key => $var) {
  221. // if email later
  222. if ($_FILES[$key][name] != '') { 
  223. // if email later
  224.  if (validate_attachment($error, $key)) { // add attachment
  225. $attach = add_attachment($key);
  226. $db->query("INSERT INTO ticket_attachments SET
  227. blobid = '$attach[blobid]',
  228. filename = '" . mysql_escape_string($attach[name]) . "',
  229. filesize = '" . mysql_escape_string($attach[size]) . "',
  230. extension = '" . mysql_escape_string($attach[extension]) . "',
  231. timestamp = '" . mktime() . "',
  232. toemail = '" . iff($_REQUEST['email'], 1, 0) . "',
  233. techid = '$user[id]',
  234. ticketid = '$id'
  235. ");
  236. $newid = $db->last_id();
  237. $attach['id'] = $newid;
  238. $i++;
  239. $added[] = $attach;
  240. ticketlog($id, 'add_attach', $newid, $newid, $attach[name]);
  241.  } else {
  242.  $errors .= $error;
  243. }
  244. }
  245. }
  246. }
  247. $ticket['usermessage'] = $_REQUEST['usermessage'];
  248. $ticket['techmessage'] = $_REQUEST['reply'];
  249. $ticket['message'] = "User's Message:n$_REQUEST[usermessage]nnTech Response:n$_REQUEST[reply]n";
  250. $db->query("
  251. REPLACE INTO tech_start_tickets 
  252. SET techid = '$user[id]', 
  253. userid = '$user_details[id]'
  254. ");
  255. if ($_REQUEST['email_user'] AND !$await) {
  256. notify_user('new_tech', $ticket, $user_details, array($_REQUEST[usermessage], $_REQUEST[reply]), $added);
  257. }
  258. if ($_REQUEST['tech'] != $user['id']) {
  259. notify_technicians('assigned', $ticket, $user_details, array($_REQUEST[usermessage], $_REQUEST[reply]), $added);
  260. } elseif (!$_REQUEST['tech']) {
  261. notify_technicians('new', $ticket, $user_details, array($_REQUEST[usermessage], $_REQUEST[reply]), $added);
  262. }
  263. if ($_REQUEST['create_faq']) {
  264. $title = urlencode($_REQUEST['subject']);
  265. $question = urlencode($_REQUEST['usermessage']);
  266. $answer = urlencode($_REQUEST['reply']);
  267. jump("../faq/view.php?do=add&title=$title&question=$question&answer=$answer", 'Ticket Created. Redirecting you to the FAQ article addition page.');
  268. } else {
  269. jump("ticketview.php?id=$id", 'Ticket Created. Redirecting you to ticket');
  270. }
  271. }
  272. /******************* PROCESS ERRORS ***********************/
  273. if ($error) {
  274. if ($newpass) { // dont show new passwords
  275. unset($_REQUEST['password'], $_REQUEST['password1']);
  276. }
  277. if ($newusername AND !$usercreated) {
  278. unset($_REQUEST['username']);
  279. }
  280. // have we created the user?
  281. if ($user_created) { 
  282. if ($error) {
  283. $error = 'The user has been created, but a problem was encountered:nn' . $error;
  284. }
  285. $_REQUEST['new_user'] = 'old';
  286. $_REQUEST['user'] = $_REQUEST['email'];
  287. }
  288. if ($error) {
  289. alert($error);
  290. }
  291. $repeat = 1;
  292. $_REQUEST['do'] = 'start';
  293. }
  294. }
  295. ############################### CREATE NEW TICKET ###############################
  296. if ($_REQUEST['do'] == "start") {
  297. echo "<form method="post" enctype="multipart/form-data" name="dpreply" id="dpreply" action="newticket.php">" . form_hidden('do', 'new');
  298. // category information
  299. $categories[0] = '';
  300. $db->query("SELECT * FROM ticket_cat ORDER by cat_order");
  301. while ($cat = $db->row_array()) {
  302. $categories[$cat[id]] = $cat[name];
  303. }
  304. // get priority data
  305. $priority[0] = '';
  306. $db->query("SELECT * from ticket_pri ORDER by pri_order");
  307. while ($pri = $db->row_array()) {
  308. $priority[$pri[id]] = $pri[name];
  309. }
  310. $tech[0] = 'Unassigned';
  311. $db->query("SELECT * FROM tech ORDER by username");
  312. while ($result = $db->row_array()) {
  313. $tech[$result[id]] = $result[username];
  314. }
  315. // get current users
  316. $db->query("SELECT username, id 
  317. FROM user, tech_start_tickets 
  318. WHERE !disabled
  319. AND tech_start_tickets.userid = user.id
  320. AND tech_start_tickets.techid = '$user[id]'
  321. ");
  322. if ($db->num_rows() > 0) {
  323. $userselect[0] = '';
  324. while ($result = $db->row_array()) {
  325. $userselect[$result['id']] = $result[username];
  326. }
  327. }
  328. if (!$_REQUEST['new_user']) {
  329. $_REQUEST['new_user'] = 'old';
  330. }
  331. if ($_REQUEST['new_user'] == 'old') {
  332. $old_start = 1;
  333. $new_start = 0;
  334. } else {
  335. $new_start = 1;
  336. $old_start = 0;
  337. }
  338. // are we coming from the comment form? If so prefill the user message
  339. if ($_REQUEST['commentid']) {
  340. $comment = $db->query_return("SELECT * FROM faq_comments WHERE id = '$_REQUEST[commentid]'");
  341. $_REQUEST['usermessage'] = $comment['comments'];
  342. // if we have userid, get username
  343. if ($comment['userid']) {
  344. $user = $db->query_return("SELECT username FROM user WHERE id = '$comment[userid]'");
  345. $_REQUEST['oldusername'] = $user['username'];
  346. // only have email address. Check if there is a username or not
  347. } elseif ($comment['useremail']) {
  348. if ($userid = userid_from_email($comment['useremail'])) {
  349. // we found the user, so get username
  350. $user = $db->query_return("SELECT username FROM user WHERE id = '$userid'");
  351. $_REQUEST['oldusername'] = $user['username'];
  352. } else {
  353. // new user
  354. $new_user_email  = $comment['useremail'];
  355. $new_start = 1;
  356. }
  357. }
  358. }
  359. $help = table_thelp('<B>Email / Username for current user</B>', 'Tickets - Starting New', 'Specifying User');
  360. $bit =  form_radio_single('new_user', 'old', $old_start, 'onClick="oc2('0','user_creation');"') . "&nbsp;&nbsp;&nbsp;" . form_input('oldusername', $_REQUEST['oldusername']) . iff(is_array($userselect), "&nbsp;&nbsp;&nbsp;" . form_select('userchoice', $userselect, '', $_REQUEST['userchoice'])) . "$html&nbsp;&nbsp;&nbsp;<a href="#" onClick="openWindow('./../users/quickfind.php?name=dpreply.oldusername', 450, 600, 'userfind')">" . html_image('tech/bul084.gif') . "</a>";
  361. $table[] = array($help, $bit);
  362. $help = table_thelp('<B>Email address of new user</B>', 'Tickets - Starting New', 'Specifying User');
  363. $bit =  form_radio_single('new_user', 'new', $new_start, ' onClick="oc2('1','user_creation');"') . "&nbsp;&nbsp;&nbsp;" .  form_input('email', $new_user_email);
  364. $table[] = array($help, $bit);
  365. $help = table_thelp('<B>Subject</B>', 'Tickets - Starting New', 'Subject');
  366. $bit = form_input('subject', $_REQUEST['subject']);
  367. $table[] = array($help, $bit);
  368. $help = table_thelp('<B>Category</B>', 'Tickets - Starting New', 'Category');
  369. $bit = form_select('ticket_category', $categories, '', $_REQUEST[ticket_category]);
  370. $table[] = array($help, $bit);
  371. $help = table_thelp('<B>Priority</B>', 'Tickets - Starting New', 'Priority');
  372. $bit = form_select('priority', $priority, '', $_REQUEST[priority]);
  373. $table[] = array($help, $bit);
  374. if ($repeat) {
  375. $starting_techs = $_REQUEST['tech'];
  376. } else {
  377. $starting_techs = $user['id'];
  378. }
  379. $help = table_thelp('<B>Assigned Technician</B>', 'Tickets - Starting New', 'Assigned Technician');
  380. $bit = form_select('tech', $tech, '', $starting_techs);
  381. $table[] = array($help, $bit);
  382. $help = table_thelp('<B>Attachments</B>', 'Tickets - Starting New', 'Attachment');
  383. $table[] = array($help, "<input type="file" name="attachment1"><br /><input type="file" name="attachment2"><br /><input type="file" name="attachment3"><br /><input type="file" name="attachment4"><br /><input type="file" name="attachment5">");
  384. $table[] = table_midheader('Message');
  385. // sort out old message / signature
  386. if ($_REQUEST[reply]) {
  387. $show_message = $_REQUEST[reply];
  388. } else {
  389. $show_message = "nn--n$user[signature]";
  390. }
  391. $help = thelp('Quick Replies', 'Inserting into Tickets');
  392. $uhelp = table_thelp('User Message', 'Tickets - Starting New', 'User Message');
  393. $thelp = table_thelp('Your Message', 'Tickets - Viewing and Responding', 'Your Message');
  394. $table[] = array(
  395. '<center>
  396. <select name="drop" style="width:150" onchange="top.empty.showdata(dpreply.drop.value)"></select><br /><br />
  397. <select size="10" name="list3" style="width:150"></select><BR />
  398. <input type="hidden" name="category" value="1">
  399. <input type="button" onClick="top.empty.godeep(dpreply.list3.value,dpreply.category.value)" value="Insert into Reply"><br /><br /> ' . $help . '
  400. </center>',
  401. "<table cellpadding="0" cellspacing="0"><tr>
  402. <td>$uhelp<b>" . 
  403. form_textarea('usermessage' ,'85', '5', $_REQUEST['usermessage']) . spellcheck_button('dpreply', 'usermessage') .
  404. "<br />$thelp
  405. <TEXTAREA NAME="reply" ROWS="12" COLS="85"
  406. ONSELECT="top.empty.storeCaret(this);"
  407. ONCLICK="top.empty.storeCaret(this);"
  408.         ONKEYUP="top.empty.storeCaret(this);">$show_message</TEXTAREA>" . spellcheck_button('dpreply', 'reply') . "
  409. </td> </tr><tr><td colspan="2">
  410. </td></tr></table>"
  411. );
  412. $help = table_thelp('<B>Options</B>', 'Tickets - Starting New', 'Options');
  413. $table[] = array($help, "
  414. <table>
  415. <tr>
  416. <td>" . form_checkbox_single('create_faq', 1, $_REQUEST['create_faq']) . " Create FAQ article from this ticket</td>
  417. <td>" . form_checkbox_single('close_ticket', 1, $_REQUEST['close_ticket']) . " Close this ticket</td>
  418. </tr>
  419. <tr><td>" . form_checkbox_single('email_user', '1', if_default($_REQUEST['email_user'], $repeat, 1)) . " Email this ticket to the user</td>
  420. <td>" . form_checkbox_single('set_awaiting_user', '1', if_default($_REQUEST['set_awaiting_user'], $repeat, 1)) . " Set ticket as Awaiting User Response</td>
  421. </tr>
  422. </table>");
  423. // get rest of ticket data
  424. $db->query("
  425. SELECT * 
  426. FROM ticket_def
  427. WHERE tech_editable
  428. ");
  429. if ($db->num_rows()) {
  430. $table[] = table_midheader('Custom Ticket Fields');
  431. while ($result = $db->row_array()) {
  432. $result[display_name] = unserialize($result[display_name]);
  433. $result[display_name] = $result[display_name][$settings[default_language]];
  434. $result[description] = unserialize($result[description]);
  435. $result[description] = $result[description][$settings[default_language]];
  436. $table[] = array("<b>" . $result[display_name] . "</b><br />" . $result[description], 
  437. field_def(
  438. $result, 
  439. 'redo', 
  440. $_REQUEST[ticket_fields][$result[name]], 
  441. $_REQUEST[ticket_fields]["extra" . $result[name]], 
  442. '', 
  443. 'ticket_fields')
  444. );
  445. }
  446. }
  447. table_header('Create new ticket', '', '', '', 'dpreply', 1);
  448. table_content('', $table);
  449. table_footer('', '', "<input type="submit" name="Send" value="Create Ticket">");
  450. unset($columns, $table);
  451. ?>
  452. <SCRIPT langauge="JavaScript">
  453. top.empty.buildselect();
  454. top.empty.showdata('0');
  455. </SCRIPT>
  456. <?
  457. ############################### FIELD TO ENTER NEW USER DATA ###############################
  458. $db->query("SELECT * FROM user_def WHERE tech_editable ORDER BY displayorder");
  459. $table[] = array(error_marker('username') . '<b>Username</b>', form_input('username', $_REQUEST['username']));
  460. $table[] = array(error_marker('password') . '<b>Password</b><br />If left empty a random password will be generated', form_password('password', $_REQUEST['password']));
  461. $table[] = array(error_marker('password1') . '<b>Repeat Password</b>', form_password('password1', $_REQUEST['password1']));
  462. if ($db->num_rows()) {
  463. $table[] = table_midheader('Custom User Fields');
  464. }
  465. while ($result =  $db->row_array()) {
  466. $result[display_name] = unserialize($result[display_name]);
  467. $result[display_name] = $result[display_name][$settings[default_language]];
  468. $result[description] = unserialize($result[description]);
  469. $result[description] = $result[display_name][$settings[description]];
  470. $bit = field_def(
  471. $result, 
  472. 'redo', 
  473. $_REQUEST[user_fields][$result[name]], 
  474. $_REQUEST[user_fields]["extra" . $result[name]], 
  475. '', 
  476. 'user_fields'
  477. );
  478. $table[] = array("<b>$result[display_name]</b>", $bit);
  479. }
  480. echo "<DIV id='user_creation'>";
  481. table_header('Custom User Fields (Optional)');
  482. table_content($columns, $table);
  483. table_footer('', '', "<input type="submit" name="Send" value="Create Ticket">");
  484. echo "
  485. <SCRIPT language='javascript'>
  486. function oc2(element, id) {
  487. e=document.getElementById(id).style;
  488. if (element == 0) {
  489. e.display='none';
  490. } else {
  491. e.display='';
  492. }
  493. }
  494. ";
  495. // display or not display user fields
  496. if (!$new_start) {
  497. echo "oc('user_creation')";
  498. }
  499. echo "
  500. </SCRIPT>
  501. ";
  502. echo "</form>";
  503. }
  504. tech_footer();
  505. ?>