📄 newticket.php
字号:
} else {
$_REQUEST['do'] = "create";
}
}
############################### CREATE NEW TICKET ###############################
if ($_REQUEST['do'] == "start") {
if (!$email) {
$email = $user[email];
}
// sort emails
if ($session[userid]) {
$email_array[] = $user[email];
$db->query("SELECT email FROM user_email WHERE userid = '$session[userid]' AND validated");
while ($result = $db->row_array()) {
$email_array[] = $result[email];
}
if (count($email_array) > 1) {
$email_html = form_select('email', $email_array, $email, '', 1);
}
} else {
$email_html = form_input('email', $email);
}
// categories
$categories = user_category_array('new');
if (is_array($categories)) {
$category_html = form_select('category', $categories, $_REQUEST[category]);
}
// priorities
$priorities = user_priority_array('new');
if (is_array($priorities)) {
$priority_html = form_select('priority', $priorities, $_REQUEST[priority]);
}
// get rest of ticket data
$db->query(
"SELECT * from ticket_def
WHERE ticket_start
ORDER by displayorder"
);
$custom = array();
while ($result = $db->row_array()) {
unset($name, $description, $error, $html);
$tmp = unserialize($result[display_name]);
$name = $tmp[$session[language]];
$tmp = unserialize($result[description]);
$description = $tmp[$session[language]];
if ($stop OR $redo) {
$html = field_def($result, 'redo', $_REQUEST[custom_fields][$result[name]], $_REQUEST[custom_fields]["extra" . $result[name]]);
} else {
$html = field_def($result);
}
$tmp = unserialize($result[error_message]);
$error = $tmp[$session[language]];
// two arrays, one for loop and one to allow custom form design
$custom[] = array(
'name' => $name,
'description' => $description,
'html' => $html,
'error' => iff(@in_array($result[name], $custom_errors), $error, '')
);
${$result[name]} = array(
'name' => $name,
'description' => $description,
'html' => $html,
'error' => iff(@in_array($result[name], $custom_errors), $error, '')
);
}
$attach = array();
$db->query(" SELECT * FROM ticket_attachments
WHERE temporaryid = '" . mysql_escape_string($tempticketid) . "'
AND temporaryid
");
while ($result = $db->row_array()) {
$attach[] = array(
'id' => $result[id],
'name' => $result[filename],
'filesize' => filesize_display($result[filesize])
);
}
eval(makeeval('header', 'HF_header'));
eval(makeeval('footer', 'HF_footer'));
eval(makeeval('echo', 'NEW_newticket'));
}
############################### ADD TICKET TO DATABASE AND PROCESS ################################
if ($_REQUEST['do'] == "create") {
/////////////////////// CHECK / CREATE USER ///////////////////////
// logged in
if (!$session[userid]) {
// old user who is not logged in
if ($user[id] = userid_from_email($email)) {
$loggedout_user = 1;
$user = $db->query_return("SELECT * FROM user WHERE id = '$user[id]'");
} else {
// create user
$new_user = 1;
// passwords
$password = make_pass(8);
$password_cookie = md5($session[sessionid] . $password . uniqid(rand(),1));
$password_cookie = substr($password_cookie, 0, 8);
$password_url = md5($password . uniqid(rand(),1) . $session[sessionid]);
$password_url = substr($password_url, 0, 8);
// create username and check valid
$username = make_username($email);
// validate number
$validate_number = substr(md5(time()),0,6);
$db->query("
INSERT into user SET
password = '" . mysql_escape_string($password) . "',
password_cookie = '" . mysql_escape_string($password_cookie) . "',
password_url = '" . mysql_escape_string($password_url) . "',
email = '" . mysql_escape_string($email) . "',
name = '" . mysql_escape_string($_REQUEST[name]) . "',
date_registered = '" . mktime() . "',
validate_key = '" . addslashes($validate_number) . "',
username = '" . mysql_escape_string($username) . "'" .
iff($settings['manual_validation'], ", awaiting_manual_validation = '1'") .
iff($settings['validate_email'], ", awaiting_validation = '1'") . "
");
$user[id] = $db->last_id();
$user = $db->query_return("SELECT * FROM user WHERE id = '$user[id]'");
$user_details = $user; // needed for email to admins
update_session('user', $user[id]);
dp_setcookie('dp_user_userid', $user[id], 'ever');
dp_setcookie('dp_user_password', $password_cookie, 'ever');
$send_emails = explode(',', $settings[email_registeradmin]);
if (is_array($send_emails)) {
foreach ($send_emails AS $key => $var) {
$var = trim($var);
if (validate_email($var)) {
$toemail = $var;
eval(makeemaileval('message', 'TECHBODY_newuser', $subject));
dp_mail($var, $subject, $message);
}
}
}
}
} else {
$loggedin_user = 1;
}
/////////////////////// CREATE TICKET ///////////////////////
$ticketref = make_ticket_ref();
$authcode = substr(md5(rand(0,100000) . mktime()), 0, 8);
// start the sql statment (including custom fields
$query = "
INSERT into ticket SET
$query2
subject = '" . mysql_escape_string($_REQUEST[subject]) . "',
language = '$session[language]',
category = '" . mysql_escape_string($_REQUEST[category]) . "',
priority = '" . mysql_escape_string($_REQUEST[priority]) . "',
userid = '$user[id]',
is_open = '1',
awaiting_tech = '1',
date_awaiting_toggled = '" . mktime() . "',
date_opened = '" . mktime() . "',
authcode = '$authcode',
ref = '$ticketref'
";
// set ticket to hidden if the user is awaiting a form of validation
// i) new users and and settings to validate
// ii) already awaiting a form of validation
// tech must validate themselves
if ($user[awaiting_manual_validation] OR ($settings[manual_validation] AND $new_user)) {
$query .= ", nodisplay = '3'";
} elseif ($user[awaiting_validation] OR ($settings[validate_email] AND $new_user)) {
// user must validate themselves
$query .= ", nodisplay = '2'";
}
// user e-mail
if ($_REQUEST['email']) {
$query .= ", email = '". mysql_escape_string($_REQUEST['email']) . "'";
}
// auto assignemnt (category overrides priority)
if ($pri_data[auto_assign_tech]) {
$query .= ", tech = '$pri_data[auto_assign_tech]'";
} elseif ($cat_data[auto_assign_tech]) {
$query .= ", tech = '$cat_data[auto_assign_tech]'";
}
// add new thread to database and get back id
$db->query($query);
$id = $db->last_id();
ticketlog($id, 'created');
/////////////////////// ATTACHMENTS ///////////////////////
if ($attachment) {
$attach = add_attachment();
$db->query("
INSERT INTO ticket_attachments SET
blobid = '$attach[blobid]',
filename = '" . mysql_escape_string($attach[name]) . "',
filesize = '" . mysql_escape_string($attach[size]) . "',
extension = '" . mysql_escape_string($attach[extension]) . "',
ticketid = '" . mysql_escape_string($id) . "',
userid = '$user[id]',
timestamp = '" . mktime() . "'
");
$attachment_id = $db->last_id();
// attachments to send
$attach['id'] = $attachment_id;
// to link to an attachment for those techs that don't want to download it
$email_attachment[] = $attach;
}
// any previous attachments
if ($_REQUEST[tempticketid]) {
$db->query("SELECT blobs.blobdata, ticket_attachments.id, filename, extension
FROM ticket_attachments
LEFT JOIN blobs ON (blobs.id = ticket_attachments.blobid)
");
// get the attachments to email
while ($result = $db->row_array()) {
$email_attachments[] = array(
'data' => $result[blobdata],
'name' => $result[filename],
'extension' => $result[extension]
);
}
$db->query("UPDATE ticket_attachments SET
ticketid = '" . mysql_escape_string($id) . "',
userid = '$user[id]',
temporaryid = ''
WHERE temporaryid = '" . mysql_escape_string($_REQUEST[tempticketid]) . "'
");
}
/////////////////////// ADD REPLY TO DATABASE ///////////////////////
// add the new post to database
$db->query("
INSERT into ticket_message SET
message = '" . mysql_escape_string($_REQUEST[message]) . "',
ticketid = '" . intval($id) . "',
userid = '$user[id]',
date = '" . mktime() . "',
ipaddress = '" . mysql_escape_string($ipaddress) . "'
");
/////////////////////// CLEAN VARIABLES TO USE IN EMAIL ///////////////////////
$ticket = $db->query_return("
SELECT ticket.*
FROM ticket
WHERE ticket.id = '" . intval($id) . "'
");
// logged in
if (!$user) {
global $user;
$user = array(
'id' => $user[id],
'password' => $password,
'password_cookie' => $password_cookie,
'password_url' => $password_url,
'subject' => $subject,
'email' => $email,
'username' => $username
);
}
$message = $_REQUEST['message'];
$ticket['body'] = $message;
/////////////////////// SEND EMAILS ///////////////////////
notify_user('new_user', $ticket, $user, $_REQUEST[message], $email_attachment);
notify_technicians('new', $ticket, $user, $_REQUEST[message], $email_attachment);
/////////////////////// JUMP DEPENDING ON USER STATUS ///////////////////////
if ($loggedin_user) {
jump("view.php?ticketref=$ticketref", 'redirect_new_ticket');
} elseif ($loggedout_user) {
jump("view.php?ticketref=$ticketref&newticket=1", 'redirect_new_ticket');
} elseif ($new_user) {
jump("view.php?ticketref=$ticketref", 'redirect_new_ticket');
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -