Файл: billing/_rootadmin/_tickets.inc.php
Строк: 503
<?
if ($sub == "setrefresh" and intval($refreshtime) >= 0) {
SetSetting("tickets_refresh",$refreshtime);
$sub = "";
}
if ($sub == "delete" and $id) {
checkAdminAccess('ticketsDelete',1);
@mysql_query("delete from tickets where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
@mysql_query("delete from tickets where parentid='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Удален тикет ID # $id");
print "Тикет успешно удален.<br><br>";
print "[ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
}
if ($sub == "view" or $sub == "attach" or $sub == "unattach" or $sub == "reply" or $sub == "close" or $sub == "delmsg" or $sub == "wait") {
if (!$id) {print "<font color=red>Утерян идентификатор тикета.</font><br><br>";}
else {
if ($sub == "reply") {
checkAdminAccess('ticketsEdit',1);
if (!$message) { print "<font color=red>Не указано сообщение.</font><br><br>";}
else {
$z=@mysql_query("select * from tickets where parentid='$id' and message='$message'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
if (mysql_num_rows($z) > 0) {
$message="";
$sub = "view";
} else {
$admUser = GetAdminById($_SESSION["adminId"]);
if ($admUser->signature) {
$message = $message."rnrn".$admUser->signature;
}
@mysql_query("update tickets set newforuser='1',status='open' where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
@mysql_query("insert into tickets (parentid,dt,message,adminname) values('$id',NOW(),'$message','".$_SESSION["adminName"]."')") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$ticket=GetTicketById($id);
$user = GetUserById($ticket->userid);
$pwd = generatePassword(25);
@mysql_query("update users set tempPassword='".crypt($pwd)."' where id='$user->id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$tpl=GetTpl('email_touser_ticket_reply',$user->lang);
$subject=$tpl[subject]; $template=$tpl[template];
if ($subject and $template) {
$company_name=GetSetting('company_name');
$company_url=GetSetting('company_url');
$support_email=GetSetting("support_email");
$support_url=GetSetting('support_url');
$subject = str_replace('{id}',$id,$subject);
$template = str_replace('{company_name}',$company_name,$template);
$template = str_replace('{company_url}',$company_url,$template);
$template = str_replace('{support_url}',$support_url,$template);
$template = str_replace('{subject}',$ticket->subject,$template);
$template = str_replace('{message}',$message,$template);
$template = str_replace('{id}',$id,$template);
$template = str_replace('{link}',$full_www_path."billing.php?do=tickets&sub=view&id=$id&login=$user->login&pass=$pwd",$template);
WriteMailLog($subject,$template,$user->id);
sendmail($user->email,$company_name,$support_email,$subject,$template);
sendmail($user->email2,$company_name,$support_email,$subject,$template);
}
$message="";
writeAdminLog("Добавлен ответ в тикет ID # $id");
print "Сообщение успешно добавлено.<br><br>";
print "[ <a href=?do=tickets&sub=view&id=$id>вернуться в тикет</a> ] [ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
}
}
}
if ($sub == "delmsg" and $id and $msg_id) {
checkAdminAccess('ticketsEdit',1);
@mysql_query("delete from tickets where parentid='$id' and id='$msg_id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Удалено сообщение в тикете ID # $id");
$sub = "view";
}
if ($sub == "close" and $id) {
checkAdminAccess('ticketsEdit',1);
$z = @mysql_query("select * from tickets where status='closed' and id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
if (mysql_num_rows($z) == 0) {
$user = GetUserById($uid);
$varLng = LoadLanguageToVariable($user->lang);
@mysql_query("update tickets set status='closed' where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
@mysql_query("insert into tickets (parentid,dt,message) values('$id',NOW(),'".$varLng[TicketsClosedBySupport]."')") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Закрыт тикет ID # $id");
print "Тикет успешно закрыт.<br><br>";
print "[ <a href=?do=tickets&sub=view&id=$id>вернуться в тикет</a> ] [ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
} else {
$sub = "view";
}
}
if ($sub == "wait" and $id) {
checkAdminAccess('ticketsEdit',1);
$z = @mysql_query("select * from tickets where status='wait' and id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
if (mysql_num_rows($z) == 0) {
@mysql_query("update tickets set status='wait' where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Тикет ID # $id переведен в ожидание");
print "Тикет успешно переведен в ожидание.<br><br>";
print "[ <a href=?do=tickets&sub=view&id=$id>вернуться в тикет</a> ] [ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
} else {
$sub = "view";
}
}
if ($sub == "attach" and $id) {
checkAdminAccess('ticketsEdit',1);
@mysql_query("update tickets set attached='1' where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Прикреплен тикет ID # $id");
print "Тикет успешно прикреплен.<br><br>";
print "[ <a href=?do=tickets&sub=view&id=$id>вернуться в тикет</a> ] [ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
}
if ($sub == "unattach" and $id) {
checkAdminAccess('ticketsEdit',1);
@mysql_query("update tickets set attached='0' where id='$id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
writeAdminLog("Откреплен тикет ID # $id");
print "Тикет успешно откреплен.<br><br>";
print "[ <a href=?do=tickets&sub=view&id=$id>вернуться в тикет</a> ] [ <a href=?do=tickets>перейти к списку тикетов</a> ]<BR><BR>";
}
if ($sub == "view" and $id) {
checkAdminAccess('ticketsRead',1);
$r=@mysql_query("select * from tickets where id=$id or parentid=$id order by id") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
if (mysql_num_rows($r) == 0) {print "<font color=red>Тикет не найден. Возможно он был удален.</font><br><br>";}
else {
@mysql_query("update tickets set newforadmin='0' where id=$id") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
print "<table cellpadding=3 width=99%>";
while ($rr = mysql_fetch_object($r)) {
$cnt++;
if ($cnt == 1 and ($rr->adminname or $rr->adminId)) { $firstMsgByAdmin = true; }
if ($rr->userid and !$rr->adminId and !$rr->adminname) {
$isAdminMsg = false;
if (!$firstMsgByAdmin) { $type="Сообщение"; } else { $type="Ответ"; }
$img="<img src="./_rootimages/ticket_user.gif" width=42>";
} else {
$isAdminMsg = true;
if ($rr->adminId) {
$admin = GetAdminById($rr->adminId);
if ($admin->name) {
$adminNameT=" ($admin->name)";
} else if ($rr->adminname) {
$adminNameT=" ($rr->adminname)";
} else {
$adminNameT="";
}
} else if ($rr->adminname) {
$adminNameT=" ($rr->adminname)";
} else {
$adminNameT="";
}
if ($firstMsgByAdmin) { $type="Сообщение"; } else { $type="Ответ"; }
$type=$type."$adminNameT";
$img="<img src="./_rootimages/ticket_admin.gif" width=42>";
}
if (!$isAdminMsg) {
$user = GetUserById($rr->userid);
$profile = GetUserProfileByUserId($rr->userid);
if ($profile->org == "3") {
if ($profile->firma) {
$namePrint = " ($profile->firma)";
} else {
$namePrint = "";
}
} else if ($profile->org == "2" or $profile->org == "1") {
if ($profile->surname or $profile->name or $profile->otchestvo) {
$namePrint = " ($profile->surname $profile->name $profile->otchestvo)";
} else {
$namePrint = "";
}
} else {
$namePrint = "";
}
if ($user->id) {
$user = " | Клиент: <A href=?do=fullinfo&id=$rr->userid target=_blank>$user->login</a>$namePrint";
}
} else {
$user = "";
}
if ($cnt == 1) {
$priority="| Важность: <img src="./_rootimages/priority_".$rr->priority.".gif" alt="Важность ".$_priority[$rr->priority]."">";
$status="| Статус: <img src="./_rootimages/ticket_".$rr->status.".gif" alt="Тикет ".$_statusTicket[$rr->status]."">";
if ($rr->status == "open" or $rr->status == "wait") {$close="<A href=?do=$do&sub=close&id=$id&uid=$rr->userid onclick="javascript: return confirm('Вы уверены, что хотите закрыть тикет?');"><img src=./_rootimages/close.gif border=0 alt='Закрыть тикет'> закрыть тикет</a> | ";}
if ($rr->status == "closed" or $rr->status == "open") {$wait="<A href=?do=$do&sub=wait&id=$id&uid=$rr->userid onclick="javascript: return confirm('Вы уверены, что хотите перевести тикет в ожидание?');"><img src=./_rootimages/ticket_wait.gif border=0 alt='Перевести тикет в ожидание'> перевести в ожидание</a> | ";}
if (!$rr->attached) {$attach="<A href=?do=$do&sub=attach&id=$id onclick="javascript: return confirm('Вы уверены, что хотите прикрепить тикет?');"><img src=./_rootimages/attach.gif border=0 alt='Прикрепить тикет'> прикрепить тикет</a> | ";}
else {$attach="<A href=?do=$do&sub=unattach&id=$id onclick="javascript: return confirm('Вы уверены, что хотите открепить тикет?');"><img src=./_rootimages/attach.gif border=0 alt='Открепить тикет'> открепить тикет</a> | ";}
print "<tr><td colspan=2 align=center bgcolor=$font_head>Просмотр тикета: <B>".$rr->subject."</b></td></tr>";
$delmsg="";
} else {
$priority="";$status="";
$delmsg = "<A href=?do=$do&sub=delmsg&id=$id&msg_id=$rr->id onclick="javascript: return confirm('Вы уверены, что хотите удалить сообщение?');"><img src=./_rootimages/del.gif border=0 alt='Удалить сообщение'></a>";
}
$rr->message = preg_replace("/rn/u", "<BR>", $rr->message);
print "<tr><td bgcolor=$font_row2 colspan=2><b>#$cnt $type</b> | Дата: $rr->dt $priority $status $user $delmsg</td></tr>";
print "<tr bgcolor=$font_row1><td width=60 valign=top>$img</td><td valign=top>$rr->message<br><br></td></tr>";
}
print "<table>";
print "$attach $wait $close <A href=?do=$do&sub=delete&id=$id onclick="javascript: return confirm('Вы уверены, что хотите удалить тикет?');"><img src=./_rootimages/del.gif border=0 alt='Удалить тикет'> удалить тикет</a><br><br>";
?>
<table border=0><form method=post>
<tr><td colspan=2 align=center bgcolor=<?=$font_head?>><B>Добавить сообщение</b></td></tr>
<input type=hidden name=do value=<?=$do?>>
<input type=hidden name=sub value=reply>
<input type=hidden name=id value=<?=$id?>>
<tr><td valign=top>Сообщение:</td><td><textarea name=message cols=70 rows=10><?=$message?></textarea></td></tr>
<tr><td colspan=2 align=center bgcolor=<?=$font_head?>><input type=Submit value="Добавить"></td></tr></table><BR></form>
<?
}
}
}
}
if (!$sub) {
checkAdminAccess('ticketsRead',1);
if ($autorefresh and IsNewTicketsForAdmin()) {
?>
<script language="JavaScript">
function settitle(current) {
var a = "Внимание!";
var b = "Новый тикет/ответ!";
if (current == a) {
document.title = b;
} else {
document.title = a;
}
setTimeout("settitle(document.title)", 1000);
}
settitle(document.title);
</script>
<?
}
$r = @mysql_query("select * from tickets where parentid=0 and attached='1' order by newforadmin, id desc") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
if (mysql_num_rows($r) > 0) {
?>
<table cellpadding=3 width=99%>
<tr><td colspan=7 align=right><?=$txt?></td></tr>
<tr><td colspan=7 align=center bgcolor=<?=$font_head?>><B>Прикрепленные тикеты</b></td></tr>
<tr bgcolor=<?=$font_head?> align=center><td>ID#</td><td></td><td>Тема</td><td>Клиент</td><td>Дата</td><td>Ответов</td><td></td></tr>
<?
$cnt=0;
while ($rr = @mysql_fetch_object($r)) {
getfont();
$cnt++;
$subj=$rr->subject; if ($rr->newforadmin) {$subj="<b>$subj</b>";}
$dt = split(' ', $rr->dt); $dt=mydate($dt[0]);
$replys=@mysql_query("select COUNT(*) as cnt from tickets where parentid='$rr->id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$replys=mysql_fetch_object($replys);
$link="?do=$do&sub=view&id=$rr->id";
$delete="<A href=?do=$do&sub=delete&id=$rr->id onclick="javascript: return confirm('Вы уверены, что хотите удалить тикет?');"><img src=./_rootimages/del.gif border=0 alt='Удалить тикет'></a>";
$close=" <A href=?do=$do&sub=close&id=$rr->id&uid=$rr->userid onclick="javascript: return confirm('Вы уверены, что хотите закрыть тикет?');"><img src=./_rootimages/close.gif border=0 alt='Закрыть тикет'></a>";
$user = GetUserById($rr->userid);
$user = "<A target=_blank href=?do=fullinfo&id=$rr->userid>$user->login</a>";
?>
<tr bgcolor="<?=$font_row?>" height=30>
<td valign=middle align=center> <?=$rr->id?> </td>
<td valign=middle width=50 align=center> <img src="./_rootimages/priority_<?=$rr->priority?>.gif" alt="Важность <?=$_priority[$rr->priority]?>"> <img src="./_rootimages/ticket_<?=$rr->status?>.gif" alt="Тикет <?=$_statusTicket[$rr->status]?>"> </td>
<td> <a href=<?=$link?>><?=$subj?></a> </td>
<td align=center> <?=$user?> </td>
<td align=center> <?=$dt?> </td>
<td align=center><?=$replys->cnt?></td>
<td align=center><?=$delete?> <?if ($rr->status == "open") {print $close;}?></td>
</tr>
<?
}
?>
<tr bgcolor=<?=$font_head?>><Td colspan=7>Прикрепленных тикетов: <?=$cnt?></td></td></tr>
<tr><td colspan=7 align=right><?=$txt?></td></tr>
</table><br>
<?
}
$myStatus = $_SESSION["ticketsStatus"]; if (!$myStatus) { $myStatus="open"; }
if ($status and $status != $myStatus) { $myStatus = $status; $_SESSION["ticketsStatus"] = $myStatus; }
if (!$myStatus or $myStatus == "open") {$status="and (status='open' or status='wait')"; $statustxt=$_lang[TicketsStatusOpen];}
else if ($myStatus == "wait") {$status="and status='wait'"; $statustxt=$_lang[TicketsStatusWait];}
else if ($myStatus == "all") {$status=""; $statustxt=$_lang[TicketsStatusAll];}
else {$status="and status='closed'"; $statustxt=$_lang[TicketsStatusClosed];}
$myDepartment = $_SESSION["ticketsDepartment"]; if (!$myDepartment) { $myDepartment="0"; }
if ($department != "" and $department != $myDepartment) { $myDepartment = $department; $_SESSION["ticketsDepartment"] = $myDepartment; }
if (!$myDepartment) {$department=""; $departmenttxt=$_lang[TicketsStatusAll];}
else {$department="and department='$myDepartment'"; $departmenttxt=GetAdminGroupById($myDepartment); $departmenttxt=$departmenttxt->name;}
if ($uid) {$mysqlUserAddon = "and userid='$uid'";}
$r = @mysql_query("select * from tickets where parentid=0 $status $department $mysqlUserAddon order by newforadmin, id desc") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$rows = mysql_num_rows($r);
list($start, $perPage, $txt) = MakePages($page, $rows, "status=$myStatus&userid=$uid&department=$myDepartment");
?>
<table cellpadding=3 width=99%>
<tr><td colspan=8 align=right><?=$txt?></td></tr>
<tr><td colspan=8 align=center bgcolor=<?=$font_head?>><B>Тикеты [<?=$statustxt?>, <?=$departmenttxt?>]</b></td></tr>
<tr><td colspan=8 align=center bgcolor=<?=$font_head?>><?=$_lang[TicketsShow]?>: [ <a href=?do=tickets&department=<?=$myDepartment?>&status=all&uid=<?=$uid?>><?=$_lang[TicketsStatusAll]?></a> ] [ <a href=?do=tickets&department=<?=$myDepartment?>&status=open&uid=<?=$uid?>><?=$_lang[TicketsStatusOpen]?></a> ] [ <a href=?do=tickets&department=<?=$myDepartment?>&status=closed&uid=<?=$uid?>><?=$_lang[TicketsStatusClosed]?></a> ] [ <a href=?do=tickets&department=<?=$myDepartment?>&status=wait&uid=<?=$uid?>><?=$_lang[TicketsStatusWait]?></a> ]</td></tr>
<tr><td colspan=8 align=center bgcolor=<?=$font_head?>><?=$_lang[TicketsDepartment]?>: [ <a href=?do=tickets&department=0&status=<?=$myStatus?>&uid=<?=$uid?>><?=$_lang[TicketsStatusAll]?></a> ]
<?
$admGroups = GetAdminGroups();
if (@mysql_num_rows($admGroups) > 0) {
while ($admGroup = @mysql_fetch_object($admGroups)) {
print "[ <a href=?do=tickets&department=$admGroup->id&status=$myStatus&uid=$uid>$admGroup->name</a> ] ";
}
}
?>
</td></tr>
<tr bgcolor=<?=$font_head?> align=center><td>ID#</td><td></td><td>Отдел</td><td>Тема</td><td>Клиент</td><td>Дата</td><td>Ответов</td><td></td></tr>
<?
$r = @mysql_query("select * from tickets where parentid=0 $status $department $mysqlUserAddon order by newforadmin, id desc LIMIT $start,$perPage") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$cnt=0;
while ($rr = @mysql_fetch_object($r)) {
getfont();
$cnt++;
$subj=$rr->subject; if ($rr->newforadmin) {$subj="<b>$subj</b>";}
$dt = split(' ', $rr->dt); $dt=mydate($dt[0]);
$replys=@mysql_query("select COUNT(*) as cnt from tickets where parentid='$rr->id'") or die("File: ".__FILE__."<BR>Line: ".__LINE__."<BR>MySQL Error: ".mysql_error());
$replys=mysql_fetch_object($replys);
$link="?do=$do&sub=view&id=$rr->id";
$delete="<A href=?do=$do&sub=delete&id=$rr->id onclick="javascript: return confirm('Вы уверены, что хотите удалить тикет?');"><img src=./_rootimages/del.gif border=0 alt='Удалить тикет'></a>";
$close=" <A href=?do=$do&sub=close&id=$rr->id&uid=$rr->userid onclick="javascript: return confirm('Вы уверены, что хотите закрыть тикет?');"><img src=./_rootimages/close.gif border=0 alt='Закрыть тикет'></a>";
$user = GetUserById($rr->userid);
$user = "<A target=_blank href=?do=fullinfo&id=$rr->userid>$user->login</a>";
if ($rr->department) {
$department = GetAdminGroupById($rr->department);
$department = $department->name;
} else {
$department = "";
}
?>
<tr bgcolor="<?=$font_row?>" height=30>
<td valign=middle align=center> <?=$rr->id?> </td>
<td valign=middle width=50 align=center> <img src="./_rootimages/priority_<?=$rr->priority?>.gif" alt="Важность <?=$_priority[$rr->priority]?>"> <img src="./_rootimages/ticket_<?=$rr->status?>.gif" alt="Тикет <?=$_statusTicket[$rr->status]?>"> </td>
<td valign=middle align=center> <?=$department?> </td>
<td> <a href=<?=$link?>><?=$subj?></a> </td>
<td align=center> <?=$user?> </td>
<td align=center> <?=$dt?> </td>
<td align=center><?=$replys->cnt?></td>
<td align=center><?=$delete?> <?if ($rr->status == "open") {print $close;}?></td>
</tr>
<?
}
?>
<tr bgcolor=<?=$font_head?>><Td colspan=8>Всего тикетов: <?=$rows?>, тикетов на странице: <?=$cnt?></td></td></tr>
<tr><td colspan=8 align=right><?=$txt?></td></tr>
</table>
<? if (!$uid) { ?>
<form method=post>
<input type=hidden name=do value=tickets>
<input type=hidden name=sub value=setrefresh>
Обновлять страницу с тикетами каждые <input type=text size=3 name=refreshtime value=<?=GetSetting("tickets_refresh")?>> секунд <input type=submit value=OK>
</form>
<? } ?>
<?
}
?>