Merge branch '3-4-0' into 'master'
2018.1.0 Update See merge request mike-koch/Mods-for-HESK!100master^2
commit
16b1e7c491
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of HESK - PHP Help Desk Software.
|
||||
*
|
||||
* (c) Copyright Klemen Stirn. All rights reserved.
|
||||
* https://www.hesk.com
|
||||
*
|
||||
* For the full copyright and license agreement information visit
|
||||
* https://www.hesk.com/eula.php
|
||||
*
|
||||
*/
|
||||
|
||||
define('IN_SCRIPT',1);
|
||||
define('HESK_PATH','../');
|
||||
|
||||
/* Get all the required files and functions */
|
||||
require(HESK_PATH . 'hesk_settings.inc.php');
|
||||
require(HESK_PATH . 'inc/common.inc.php');
|
||||
require(HESK_PATH . 'inc/admin_functions.inc.php');
|
||||
require(HESK_PATH . 'inc/privacy_functions.inc.php');
|
||||
hesk_load_database_functions();
|
||||
|
||||
hesk_session_start();
|
||||
hesk_dbConnect();
|
||||
hesk_isLoggedIn();
|
||||
|
||||
// Check permissions for this feature
|
||||
hesk_checkPermission('can_privacy');
|
||||
|
||||
// A security check
|
||||
hesk_token_check();
|
||||
|
||||
// Tracking ID
|
||||
$trackingID = hesk_cleanID() or die($hesklang['int_error'].': '.$hesklang['no_trackID']);
|
||||
|
||||
// Anonymize the ticket and redirect back
|
||||
if (hesk_anonymizeTicket(0, $trackingID))
|
||||
{
|
||||
hesk_process_messages($hesklang['success_anon'],'admin_ticket.php?track='.$trackingID.'&Refresh='.mt_rand(10000,99999),'SUCCESS');
|
||||
}
|
||||
|
||||
hesk_error($hesklang['no_permission']);
|
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of HESK - PHP Help Desk Software.
|
||||
*
|
||||
* (c) Copyright Klemen Stirn. All rights reserved.
|
||||
* https://www.hesk.com
|
||||
*
|
||||
* For the full copyright and license agreement information visit
|
||||
* https://www.hesk.com/eula.php
|
||||
*
|
||||
*/
|
||||
|
||||
define('IN_SCRIPT',1);
|
||||
define('HESK_PATH','../');
|
||||
|
||||
/* Get all the required files and functions */
|
||||
require(HESK_PATH . 'hesk_settings.inc.php');
|
||||
require(HESK_PATH . 'inc/common.inc.php');
|
||||
require(HESK_PATH . 'inc/admin_functions.inc.php');
|
||||
require(HESK_PATH . 'inc/privacy_functions.inc.php');
|
||||
hesk_load_database_functions();
|
||||
|
||||
hesk_session_start();
|
||||
hesk_dbConnect();
|
||||
hesk_isLoggedIn();
|
||||
|
||||
// Check permissions for this feature
|
||||
hesk_checkPermission('can_export');
|
||||
|
||||
// A security check
|
||||
hesk_token_check();
|
||||
|
||||
// Tracking ID
|
||||
$trackingID = hesk_cleanID() or die($hesklang['int_error'].': '.$hesklang['no_trackID']);
|
||||
|
||||
// Generate SQL for the ticket, make sure the user has access to it
|
||||
$sql = "SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `trackid`='".hesk_dbEscape($trackingID)."' AND ";
|
||||
$sql .= hesk_myCategories();
|
||||
$sql .= " AND " . hesk_myOwnership();
|
||||
$sql .= " LIMIT 1";
|
||||
|
||||
require_once(HESK_PATH . 'inc/custom_fields.inc.php');
|
||||
require_once(HESK_PATH . 'inc/statuses.inc.php');
|
||||
require(HESK_PATH . 'inc/export_functions.inc.php');
|
||||
|
||||
list($success_msg, $tickets_exported) = hesk_export_to_XML($sql, true);
|
||||
|
||||
if ($tickets_exported == 1)
|
||||
{
|
||||
hesk_process_messages($success_msg,'admin_ticket.php?track='.$trackingID.'&Refresh='.mt_rand(10000,99999),'SUCCESS');
|
||||
}
|
||||
|
||||
hesk_error($hesklang['n2ex']);
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace BusinessLogic\Tickets;
|
||||
|
||||
|
||||
class CreateReplyRequest {
|
||||
public $ticketId;
|
||||
public $trackingId;
|
||||
public $emailAddress;
|
||||
public $replyMessage;
|
||||
public $hasHtml;
|
||||
public $ipAddress;
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace BusinessLogic\Tickets;
|
||||
|
||||
|
||||
class CustomerCreatedReplyModel {
|
||||
public $id;
|
||||
public $ticketId;
|
||||
public $replierName;
|
||||
public $message;
|
||||
public $dateCreated;
|
||||
public $html;
|
||||
}
|
@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
namespace BusinessLogic\Tickets;
|
||||
|
||||
|
||||
use BusinessLogic\Emails\Addressees;
|
||||
use BusinessLogic\Emails\EmailSenderHelper;
|
||||
use BusinessLogic\Emails\EmailTemplateRetriever;
|
||||
use BusinessLogic\Exceptions\ApiFriendlyException;
|
||||
use BusinessLogic\Exceptions\ValidationException;
|
||||
use BusinessLogic\Helpers;
|
||||
use BusinessLogic\Security\UserContext;
|
||||
use BusinessLogic\Statuses\Closable;
|
||||
use BusinessLogic\Statuses\DefaultStatusForAction;
|
||||
use BusinessLogic\ValidationModel;
|
||||
use DataAccess\AuditTrail\AuditTrailGateway;
|
||||
use DataAccess\Security\LoginGateway;
|
||||
use DataAccess\Security\UserGateway;
|
||||
use DataAccess\Statuses\StatusGateway;
|
||||
use DataAccess\Tickets\ReplyGateway;
|
||||
use DataAccess\Tickets\TicketGateway;
|
||||
|
||||
class ReplyCreator extends \BaseClass {
|
||||
private $statusGateway;
|
||||
private $ticketGateway;
|
||||
private $emailSenderHelper;
|
||||
private $userGateway;
|
||||
private $auditTrailGateway;
|
||||
private $loginGateway;
|
||||
private $replyGateway;
|
||||
|
||||
public function __construct(StatusGateway $statusGateway,
|
||||
TicketGateway $ticketGateway,
|
||||
EmailSenderHelper $emailSenderHelper,
|
||||
UserGateway $userGateway,
|
||||
AuditTrailGateway $auditTrailGateway,
|
||||
LoginGateway $loginGateway,
|
||||
ReplyGateway $replyGateway) {
|
||||
$this->statusGateway = $statusGateway;
|
||||
$this->ticketGateway = $ticketGateway;
|
||||
$this->emailSenderHelper = $emailSenderHelper;
|
||||
$this->userGateway = $userGateway;
|
||||
$this->auditTrailGateway = $auditTrailGateway;
|
||||
$this->loginGateway = $loginGateway;
|
||||
$this->replyGateway = $replyGateway;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $replyRequest CreateReplyRequest
|
||||
* @param $heskSettings array
|
||||
* @param $modsForHeskSettings array
|
||||
* @throws ApiFriendlyException
|
||||
* @throws \Exception
|
||||
*/
|
||||
function createReplyByCustomer($replyRequest, $heskSettings, $modsForHeskSettings) {
|
||||
$ticket = $this->ticketGateway->getTicketByTrackingId($replyRequest->trackingId, $heskSettings);
|
||||
|
||||
if ($ticket === null) {
|
||||
throw new ApiFriendlyException("Ticket with tracking ID {$replyRequest->trackingId} not found.",
|
||||
"Ticket not found", 404);
|
||||
}
|
||||
|
||||
$validationModel = new ValidationModel();
|
||||
if ($replyRequest->replyMessage === null || trim($replyRequest->replyMessage) === '') {
|
||||
$validationModel->errorKeys[] = 'MESSAGE_REQUIRED';
|
||||
}
|
||||
|
||||
if ($heskSettings['email_view_ticket']) {
|
||||
if ($replyRequest->emailAddress === null || trim($replyRequest->emailAddress) === '') {
|
||||
$validationModel->errorKeys[] = 'EMAIL_REQUIRED';
|
||||
} elseif (!in_array($replyRequest->emailAddress, $ticket->email)) {
|
||||
$validationModel->errorKeys[] = 'EMAIL_NOT_FOUND_ON_TICKET';
|
||||
}
|
||||
}
|
||||
|
||||
if (count($validationModel->errorKeys) > 0) {
|
||||
throw new ValidationException($validationModel);
|
||||
}
|
||||
|
||||
if ($modsForHeskSettings['rich_text_for_tickets_for_customers']) {
|
||||
$replyRequest->replyMessage = Helpers::heskMakeUrl($replyRequest->replyMessage);
|
||||
$replyRequest->replyMessage = nl2br($replyRequest->replyMessage);
|
||||
}
|
||||
|
||||
if ($this->loginGateway->isIpLockedOut($replyRequest->ipAddress, $heskSettings)) {
|
||||
throw new ApiFriendlyException("The IP address entered has been locked out of the system for {$heskSettings['attempt_banmin']} minutes because of too many login failures",
|
||||
"Locked Out",
|
||||
403);
|
||||
}
|
||||
|
||||
if ($this->ticketGateway->areRepliesBeingFlooded($replyRequest->ticketId, $replyRequest->ipAddress, $heskSettings)) {
|
||||
throw new ApiFriendlyException("You have been locked out of the system for {$heskSettings['attempt_banmin']} minutes because of too many replies to a ticket.",
|
||||
"Locked Out",
|
||||
403);
|
||||
}
|
||||
|
||||
// If staff hasn't replied yet, don't change the status; otherwise set it to the status for customer replies
|
||||
$currentStatus = $this->statusGateway->getStatusById($ticket->statusId, $heskSettings);
|
||||
if ($currentStatus->closable === Closable::YES || $currentStatus->closable === Closable::CUSTOMERS_ONLY) {
|
||||
$customerReplyStatus = $this->statusGateway->getStatusForDefaultAction(DefaultStatusForAction::CUSTOMER_REPLY, $heskSettings);
|
||||
$defaultNewTicketStatus = $this->statusGateway->getStatusForDefaultAction(DefaultStatusForAction::NEW_TICKET, $heskSettings);
|
||||
|
||||
$ticket->statusId = $ticket->statusId === $defaultNewTicketStatus->id ?
|
||||
$defaultNewTicketStatus->id :
|
||||
$customerReplyStatus->id;
|
||||
}
|
||||
|
||||
$this->ticketGateway->updateMetadataForReply($ticket->id, $ticket->statusId, $heskSettings);
|
||||
$createdReply = $this->replyGateway->insertReply($ticket->id, $ticket->name, $replyRequest->replyMessage, $replyRequest->hasHtml, $heskSettings);
|
||||
|
||||
//-- Changing the ticket message to the reply's
|
||||
$ticket->message = $replyRequest->replyMessage;
|
||||
|
||||
$addressees = new Addressees();
|
||||
if ($ticket->ownerId !== null && $ticket->ownerId !== 0) {
|
||||
$owner = $this->userGateway->getUserById($ticket->ownerId, $heskSettings);
|
||||
|
||||
if ($owner->notificationSettings->replyToMe) {
|
||||
$addressees->to[] = $owner->email;
|
||||
$language = $owner->language === null ? $heskSettings['language'] : $owner->language;
|
||||
$this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_REPLY_BY_CUSTOMER,
|
||||
$language,
|
||||
$addressees,
|
||||
$ticket,
|
||||
$heskSettings,
|
||||
$modsForHeskSettings);
|
||||
}
|
||||
} else {
|
||||
$users = $this->userGateway->getUsersForUnassignedReplyNotification($heskSettings);
|
||||
foreach ($users as $user) {
|
||||
$addressees->to[] = $user->email;
|
||||
$language = $user->language === null ? $heskSettings['language'] : $user->language;
|
||||
|
||||
$this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_REPLY_BY_CUSTOMER,
|
||||
$language,
|
||||
$addressees,
|
||||
$ticket,
|
||||
$heskSettings,
|
||||
$modsForHeskSettings);
|
||||
}
|
||||
}
|
||||
|
||||
return $createdReply;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Controllers\Tickets;
|
||||
|
||||
|
||||
use BusinessLogic\Helpers;
|
||||
use BusinessLogic\Tickets\CreateReplyRequest;
|
||||
use BusinessLogic\Tickets\ReplyCreator;
|
||||
use Controllers\JsonRetriever;
|
||||
use DataAccess\Settings\ModsForHeskSettingsGateway;
|
||||
|
||||
class CustomerReplyController extends \BaseClass {
|
||||
function post($ticketId) {
|
||||
global $applicationContext, $hesk_settings;
|
||||
|
||||
$jsonRequest = JsonRetriever::getJsonData();
|
||||
|
||||
$createReplyByCustomerModel = new CreateReplyRequest();
|
||||
$createReplyByCustomerModel->id = $ticketId;
|
||||
$createReplyByCustomerModel->emailAddress = Helpers::safeArrayGet($jsonRequest, 'email');
|
||||
$createReplyByCustomerModel->trackingId = Helpers::safeArrayGet($jsonRequest, 'trackingId');
|
||||
$createReplyByCustomerModel->replyMessage = Helpers::safeArrayGet($jsonRequest, 'message');
|
||||
$createReplyByCustomerModel->hasHtml = Helpers::safeArrayGet($jsonRequest, 'html');
|
||||
$createReplyByCustomerModel->ipAddress = Helpers::safeArrayGet($jsonRequest, 'ip');
|
||||
|
||||
if ($createReplyByCustomerModel->ipAddress === null) {
|
||||
$createReplyByCustomerModel->ipAddress = hesk_getClientIP();
|
||||
}
|
||||
|
||||
/* @var $modsForHeskSettingsGateway ModsForHeskSettingsGateway */
|
||||
$modsForHeskSettingsGateway = $applicationContext->get(ModsForHeskSettingsGateway::clazz());
|
||||
$modsForHesk_settings = $modsForHeskSettingsGateway->getAllSettings($hesk_settings);
|
||||
|
||||
/* @var $replyCreator ReplyCreator */
|
||||
$replyCreator = $applicationContext->get(ReplyCreator::clazz());
|
||||
$createdReply = $replyCreator->createReplyByCustomer($createReplyByCustomerModel, $hesk_settings, $modsForHesk_settings);
|
||||
|
||||
return output($createdReply, 201);
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace DataAccess\Security;
|
||||
|
||||
|
||||
use DataAccess\CommonDao;
|
||||
|
||||
class LoginGateway extends CommonDao {
|
||||
function isIpLockedOut($ipAddress, $heskSettings) {
|
||||
$this->init();
|
||||
|
||||
$rs = hesk_dbQuery("SELECT `number` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "logins`
|
||||
WHERE `ip` = '" . hesk_dbEscape($ipAddress) . "'
|
||||
AND `last_attempt` IS NOT NULL
|
||||
AND DATE_ADD(`last_attempt`, INTERVAL ".intval($heskSettings['attempt_banmin'])." MINUTE ) > NOW() LIMIT 1");
|
||||
|
||||
$result = hesk_dbNumRows($rs) == 1 &&
|
||||
hesk_dbResult($rs) >= $heskSettings['attempt_limit'];
|
||||
|
||||
$this->close();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace DataAccess\Tickets;
|
||||
|
||||
|
||||
use BusinessLogic\Tickets\CustomerCreatedReplyModel;
|
||||
use DataAccess\CommonDao;
|
||||
|
||||
class ReplyGateway extends CommonDao {
|
||||
function insertReply($ticketId, $name, $message, $html, $heskSettings) {
|
||||
$this->init();
|
||||
|
||||
hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . "replies` (`replyto`,`name`,`message`,`dt`,`attachments`, `html`)
|
||||
VALUES ({$ticketId},'" . hesk_dbEscape($name) . "','" . hesk_dbEscape($message) . "',NOW(),'','" . $html . "')");
|
||||
|
||||
$customerCreatedReplyModel = new CustomerCreatedReplyModel();
|
||||
$id = hesk_dbInsertID();
|
||||
|
||||
$rs = hesk_dbQuery("SELECT * FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "replies` WHERE `id` = " . intval($id));
|
||||
$row = hesk_dbFetchAssoc($rs);
|
||||
|
||||
$customerCreatedReplyModel->id = $row['id'];
|
||||
$customerCreatedReplyModel->message = $row['message'];
|
||||
$customerCreatedReplyModel->ticketId = $row['replyto'];
|
||||
$customerCreatedReplyModel->dateCreated = hesk_date($row['dt'], true);
|
||||
$customerCreatedReplyModel->html = $row['html'] === '1';
|
||||
$customerCreatedReplyModel->replierName = $row['name'];
|
||||
|
||||
$this->close();
|
||||
|
||||
return $customerCreatedReplyModel;
|
||||
}
|
||||
}
|
@ -0,0 +1,383 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of HESK - PHP Help Desk Software.
|
||||
*
|
||||
* (c) Copyright Klemen Stirn. All rights reserved.
|
||||
* https://www.hesk.com
|
||||
*
|
||||
* For the full copyright and license agreement information visit
|
||||
* https://www.hesk.com/eula.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* Check if this is a valid include */
|
||||
if (!defined('IN_SCRIPT')) {die('Invalid attempt');}
|
||||
|
||||
/*** FUNCTIONS ***/
|
||||
|
||||
function hesk_export_to_XML($sql, $export_selected = false)
|
||||
{
|
||||
global $hesk_settings, $hesklang, $ticket, $my_cat;
|
||||
|
||||
// We'll need HH:MM:SS format for hesk_date() here
|
||||
$hesk_settings['timeformat'] = 'H:i:s';
|
||||
|
||||
// Get staff names
|
||||
$admins = array();
|
||||
$result = hesk_dbQuery("SELECT `id`,`name` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "users` ORDER BY `name` ASC");
|
||||
while ($row = hesk_dbFetchAssoc($result)) {
|
||||
$admins[$row['id']] = $row['name'];
|
||||
}
|
||||
|
||||
// Get category names
|
||||
if ( ! isset($my_cat))
|
||||
{
|
||||
$my_cat = array();
|
||||
$res2 = hesk_dbQuery("SELECT `id`, `name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."categories` WHERE " . hesk_myCategories('id') . " ORDER BY `cat_order` ASC");
|
||||
while ($row=hesk_dbFetchAssoc($res2))
|
||||
{
|
||||
$my_cat[$row['id']] = hesk_msgToPlain($row['name'], 1);
|
||||
}
|
||||
}
|
||||
|
||||
// This will be the export directory
|
||||
$export_dir = HESK_PATH.$hesk_settings['cache_dir'].'/';
|
||||
|
||||
// This will be the name of the export and the XML file
|
||||
$export_name = 'hesk_export_' . date('Y-m-d_H-i-s') . '_' . mt_rand(10000, 99999);
|
||||
$save_to = $export_dir . $export_name . '.xml';
|
||||
|
||||
// Do we have the export directory?
|
||||
if (is_dir($export_dir) || (@mkdir($export_dir, 0777) && is_writable($export_dir))) {
|
||||
// Is there an index.htm file?
|
||||
if (!file_exists($export_dir.'index.htm')) {
|
||||
@file_put_contents($export_dir.'index.htm', '');
|
||||
}
|
||||
|
||||
// Cleanup old files
|
||||
hesk_purge_cache('export', 86400);
|
||||
} else {
|
||||
hesk_error($hesklang['ede']);
|
||||
}
|
||||
|
||||
// Make sure the file can be saved and written to
|
||||
@file_put_contents($save_to, '');
|
||||
if (!file_exists($save_to)) {
|
||||
hesk_error($hesklang['eef']);
|
||||
}
|
||||
|
||||
// Start generating the report message and generating the export
|
||||
$success_msg = '';
|
||||
$flush_me = '<br /><br />';
|
||||
$flush_me .= hesk_date() . " | {$hesklang['inite']} ";
|
||||
|
||||
// Is this export of a date or date range?
|
||||
if ($export_selected === false)
|
||||
{
|
||||
global $date_from, $date_to;
|
||||
|
||||
if ($date_from == $date_to)
|
||||
{
|
||||
$flush_me .= "(" . hesk_dateToString($date_from,0) . ")";
|
||||
}
|
||||
else
|
||||
{
|
||||
$flush_me .= "(" . hesk_dateToString($date_from,0) . " - " . hesk_dateToString($date_to,0) . ")";
|
||||
}
|
||||
}
|
||||
|
||||
// Start generating file contents
|
||||
$tmp = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?mso-application progid="Excel.Sheet"?>
|
||||
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40">
|
||||
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
|
||||
<AllowPNG/>
|
||||
</OfficeDocumentSettings>
|
||||
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<WindowHeight>8250</WindowHeight>
|
||||
<WindowWidth>16275</WindowWidth>
|
||||
<WindowTopX>360</WindowTopX>
|
||||
<WindowTopY>90</WindowTopY>
|
||||
<ProtectStructure>False</ProtectStructure>
|
||||
<ProtectWindows>False</ProtectWindows>
|
||||
</ExcelWorkbook>
|
||||
<Styles>
|
||||
<Style ss:ID="Default" ss:Name="Normal">
|
||||
<Alignment ss:Vertical="Bottom"/>
|
||||
<Borders/>
|
||||
<Font ss:FontName="Calibri" x:CharSet="238" x:Family="Swiss" ss:Size="11"
|
||||
ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
<NumberFormat/>
|
||||
<Protection/>
|
||||
</Style>
|
||||
<Style ss:ID="s62">
|
||||
<NumberFormat ss:Format="General Date"/>
|
||||
</Style>
|
||||
<Style ss:ID="s63">
|
||||
<NumberFormat ss:Format="Short Date"/>
|
||||
</Style>
|
||||
<Style ss:ID="s65">
|
||||
<NumberFormat ss:Format="[h]:mm:ss"/>
|
||||
</Style>
|
||||
</Styles>
|
||||
<Worksheet ss:Name="Sheet1">
|
||||
<Table>
|
||||
';
|
||||
|
||||
// Define column width
|
||||
$tmp .= '
|
||||
<Column ss:AutoFitWidth="0" ss:Width="50"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="84" ss:Span="1"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="110"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="110"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="90"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="90"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="87"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="57.75"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="57.75"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="100"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="100"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="80"/>
|
||||
<Column ss:AutoFitWidth="0" ss:Width="80"/>
|
||||
';
|
||||
|
||||
foreach ($hesk_settings['custom_fields'] as $k => $v) {
|
||||
if ($v['use']) {
|
||||
$tmp .= '<Column ss:AutoFitWidth="0" ss:Width="80"/>' . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Define first row (header)
|
||||
$tmp .= '
|
||||
<Row>
|
||||
<Cell><Data ss:Type="String">#</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['trackID'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['date'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['last_update'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['name'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['email'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['category'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['priority'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['status'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['subject'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['message'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['owner'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String">' . $hesklang['ts'] . '</Data></Cell>
|
||||
';
|
||||
|
||||
foreach ($hesk_settings['custom_fields'] as $k => $v) {
|
||||
if ($v['use']) {
|
||||
$tmp .= '<Cell><Data ss:Type="String">' . $v['name'] . '</Data></Cell>' . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
$tmp .= "</Row>\n";
|
||||
|
||||
// Write what we have by now into the XML file
|
||||
file_put_contents($save_to, $tmp, FILE_APPEND);
|
||||
$flush_me .= hesk_date() . " | {$hesklang['gXML']}<br />\n";
|
||||
|
||||
// OK, now start dumping data and writing it into the file
|
||||
$tickets_exported = 0;
|
||||
$save_after = 100;
|
||||
$this_round = 0;
|
||||
$tmp = '';
|
||||
|
||||
$result = hesk_dbQuery($sql);
|
||||
while ($ticket = hesk_dbFetchAssoc($result)) {
|
||||
$ticket['status'] = mfh_getDisplayTextForStatusId($ticket['status']);
|
||||
|
||||
switch ($ticket['priority']) {
|
||||
case 0:
|
||||
$ticket['priority'] = $hesklang['critical'];
|
||||
break;
|
||||
case 1:
|
||||
$ticket['priority'] = $hesklang['high'];
|
||||
break;
|
||||
case 2:
|
||||
$ticket['priority'] = $hesklang['medium'];
|
||||
break;
|
||||
default:
|
||||
$ticket['priority'] = $hesklang['low'];
|
||||
}
|
||||
|
||||
$ticket['archive'] = !($ticket['archive']) ? $hesklang['no'] : $hesklang['yes'];
|
||||
$ticket['message'] = hesk_msgToPlain($ticket['message'], 1, 0);
|
||||
$ticket['subject'] = hesk_msgToPlain($ticket['subject'], 1, 0);
|
||||
$ticket['owner'] = isset($admins[$ticket['owner']]) ? $admins[$ticket['owner']] : '';
|
||||
$ticket['category'] = isset($my_cat[$ticket['category']]) ? $my_cat[$ticket['category']] : '';
|
||||
|
||||
// Format for export dates
|
||||
$hesk_settings['timeformat'] = "Y-m-d\TH:i:s\.000";
|
||||
|
||||
// Create row for the XML file
|
||||
$tmp .= '
|
||||
<Row>
|
||||
<Cell><Data ss:Type="Number">' . $ticket['id'] . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['trackid'] . ']]></Data></Cell>
|
||||
<Cell ss:StyleID="s62"><Data ss:Type="DateTime">' . hesk_date($ticket['dt'], true) . '</Data></Cell>
|
||||
<Cell ss:StyleID="s62"><Data ss:Type="DateTime">' . hesk_date($ticket['lastchange'], true) . '</Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . hesk_msgToPlain($ticket['name'], 1) . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['email'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['category'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['priority'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['status'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['subject'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['message'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['owner'] . ']]></Data></Cell>
|
||||
<Cell><Data ss:Type="String"><![CDATA[' . $ticket['time_worked'] . ']]></Data></Cell>
|
||||
';
|
||||
|
||||
// Add custom fields
|
||||
foreach ($hesk_settings['custom_fields'] as $k=>$v) {
|
||||
if ($v['use']) {
|
||||
switch ($v['type']) {
|
||||
case 'date':
|
||||
$tmp_dt = hesk_custom_date_display_format($ticket[$k], 'Y-m-d\T00:00:00.000');
|
||||
$tmp .= strlen($tmp_dt) ? '<Cell ss:StyleID="s63"><Data ss:Type="DateTime">'.$tmp_dt : '<Cell><Data ss:Type="String">';
|
||||
$tmp .= "</Data></Cell> \n";
|
||||
break;
|
||||
default:
|
||||
$tmp .= '<Cell><Data ss:Type="String"><![CDATA['.hesk_msgToPlain($ticket[$k], 1, 0).']]></Data></Cell> ' . "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$tmp .= "</Row>\n";
|
||||
|
||||
// Write every 100 rows into the file
|
||||
if ($this_round >= $save_after) {
|
||||
file_put_contents($save_to, $tmp, FILE_APPEND);
|
||||
$this_round = 0;
|
||||
$tmp = '';
|
||||
usleep(1);
|
||||
}
|
||||
|
||||
$tickets_exported++;
|
||||
$this_round++;
|
||||
} // End of while loop
|
||||
|
||||
// Go back to the HH:MM:SS format for hesk_date()
|
||||
$hesk_settings['timeformat'] = 'H:i:s';
|
||||
|
||||
// Append any remaining rows into the file
|
||||
if ($this_round > 0) {
|
||||
file_put_contents($save_to, $tmp, FILE_APPEND);
|
||||
}
|
||||
|
||||
// If any tickets were exported, continue, otherwise cleanup
|
||||
if ($tickets_exported > 0) {
|
||||
// Finish the XML file
|
||||
$tmp = '
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Selected/>
|
||||
<Panes>
|
||||
<Pane>
|
||||
<Number>3</Number>
|
||||
<ActiveRow>4</ActiveRow>
|
||||
</Pane>
|
||||
</Panes>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet2">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="15">
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet3">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="15">
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
</Workbook>
|
||||
';
|
||||
file_put_contents($save_to, $tmp, FILE_APPEND);
|
||||
|
||||
// Log how many rows we exported
|
||||
$flush_me .= hesk_date() . " | " . sprintf($hesklang['nrow'], $tickets_exported) . "<br />\n";
|
||||
|
||||
// We will convert XML to Zip to save a lot of space
|
||||
$save_to_zip = $export_dir . $export_name . '.zip';
|
||||
|
||||
// Log start of Zip creation
|
||||
$flush_me .= hesk_date() . " | {$hesklang['cZIP']}<br />\n";
|
||||
|
||||
// Preferrably use the zip extension
|
||||
if (extension_loaded('zip')) {
|
||||
$save_to_zip = $export_dir . $export_name . '.zip';
|
||||
|
||||
$zip = new ZipArchive;
|
||||
$res = $zip->open($save_to_zip, ZipArchive::CREATE);
|
||||
if ($res === TRUE) {
|
||||
$zip->addFile($save_to, "{$export_name}.xml");
|
||||
$zip->close();
|
||||
} else {
|
||||
die("{$hesklang['eZIP']} <$save_to_zip>\n");
|
||||
}
|
||||
|
||||
} // Some servers have ZipArchive class enabled anyway - can we use it?
|
||||
elseif (class_exists('ZipArchive')) {
|
||||
require(HESK_PATH . 'inc/zip/Zip.php');
|
||||
$zip = new Zip();
|
||||
$zip->addLargeFile($save_to, "{$export_name}.xml");
|
||||
$zip->finalize();
|
||||
$zip->setZipFile($save_to_zip);
|
||||
} // If not available, use a 3rd party Zip class included with HESK
|
||||
else {
|
||||
require(HESK_PATH . 'inc/zip/pclzip.lib.php');
|
||||
$zip = new PclZip($save_to_zip);
|
||||
$zip->add($save_to, PCLZIP_OPT_REMOVE_ALL_PATH);
|
||||
}
|
||||
|
||||
// Delete XML, just leave the Zip archive
|
||||
hesk_unlink($save_to);
|
||||
|
||||
// Echo memory peak usage
|
||||
$flush_me .= hesk_date() . " | " . sprintf($hesklang['pmem'], (@memory_get_peak_usage(true) / 1048576)) . "<br />\r\n";
|
||||
|
||||
// We're done!
|
||||
$flush_me .= hesk_date() . " | {$hesklang['fZIP']}<br /><br />";
|
||||
|
||||
// Success message
|
||||
$success_msg .= $hesk_settings['debug_mode'] ? $flush_me : '<br /><br />';
|
||||
$success_msg .= $hesklang['step1'] . ': <a href="' . $save_to_zip . '">' . $hesklang['ch2d'] . '</a><br /><br />' . $hesklang['step2'] . ': <a href="export.php?delete='.urlencode($export_name).'">' . $hesklang['dffs'] . '</a>';
|
||||
} // No tickets exported, cleanup
|
||||
else {
|
||||
hesk_unlink($save_to);
|
||||
}
|
||||
|
||||
return array($success_msg, $tickets_exported);
|
||||
|
||||
} // END hesk_export_to_XML()
|
@ -0,0 +1,151 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of HESK - PHP Help Desk Software.
|
||||
*
|
||||
* (c) Copyright Klemen Stirn. All rights reserved.
|
||||
* https://www.hesk.com
|
||||
*
|
||||
* For the full copyright and license agreement information visit
|
||||
* https://www.hesk.com/eula.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* Check if this is a valid include */
|
||||
if (!defined('IN_SCRIPT')) {die('Invalid attempt');}
|
||||
|
||||
// Ticket priority
|
||||
switch ($ticket['priority']) {
|
||||
case 0:
|
||||
$ticket['priority'] = '<b>' . $hesklang['critical'] . '</b>';
|
||||
break;
|
||||
case 1:
|
||||
$ticket['priority'] = '<b>' . $hesklang['high'] . '</b>';
|
||||
break;
|
||||
case 2:
|
||||
$ticket['priority'] = $hesklang['medium'];
|
||||
break;
|
||||
default:
|
||||
$ticket['priority'] = $hesklang['low'];
|
||||
}
|
||||
|
||||
// Set last replier name
|
||||
if ($ticket['lastreplier']) {
|
||||
if (empty($ticket['repliername'])) {
|
||||
$ticket['repliername'] = $hesklang['staff'];
|
||||
}
|
||||
} else {
|
||||
$ticket['repliername'] = $ticket['name'];
|
||||
}
|
||||
|
||||
// Other variables that need processing
|
||||
$ticket['dt'] = hesk_date($ticket['dt'], true);
|
||||
$ticket['lastchange'] = hesk_date($ticket['lastchange'], true);
|
||||
$random = mt_rand(10000, 99999);
|
||||
|
||||
// Print ticket head
|
||||
echo '
|
||||
<h3>' . $ticket['subject'] . '</h3>
|
||||
<hr/>
|
||||
<table border="1" bordercolor="#FFFFFF" cellspacing="0" cellpadding="2" width="100%">
|
||||
|
||||
<tr>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['trackID'] . ':</b></td><td bgcolor="#DDD">' . $ticket['trackid'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['ticket_status'] . ':</b></td><td bgcolor="#DDD">' . $hesklang[$ticket['statusKey']] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['created_on'] . ':</b></td><td bgcolor="#DDD">' . $ticket['dt'] . '</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['last_update'] . ':</b></td><td bgcolor="#DDD">' . $ticket['lastchange'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['last_replier'] . ':</b></td><td bgcolor="#DDD">' . $ticket['repliername'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['category'] . ':</b></td><td bgcolor="#DDD">' . $category['name'] . '</td>
|
||||
</tr>
|
||||
';
|
||||
|
||||
// Show IP and time worked to staff
|
||||
if (!empty($_SESSION['id'])) {
|
||||
echo '
|
||||
<tr>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['ts'] . ':</b></td><td bgcolor="#DDD">' . $ticket['time_worked'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['ip'] . ':</b></td><td bgcolor="#DDD">' . $ticket['ip'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['email'] . ':</b></td><td bgcolor="#DDD">' . $ticket['email'] . '</td>
|
||||
</tr>
|
||||
';
|
||||
}
|
||||
|
||||
echo '<tr>';
|
||||
// Assigned to?
|
||||
if ($ticket['owner'] && !empty($_SESSION['id'])) {
|
||||
$ticket['owner'] = hesk_getOwnerName($ticket['owner']);
|
||||
echo '
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['taso3'] . '</b></td>
|
||||
<td bgcolor="#DDD">' . $ticket['owner'] . '</td>
|
||||
';
|
||||
}
|
||||
|
||||
|
||||
echo '
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['name'] . ':</b></td>
|
||||
<td bgcolor="#DDD">' . $ticket['name'] . '</td>
|
||||
';
|
||||
echo '</tr>';
|
||||
|
||||
// Custom fields
|
||||
$num_cols = 0;
|
||||
echo '<tr>';
|
||||
foreach ($hesk_settings['custom_fields'] as $k => $v) {
|
||||
if (($v['use'] == 1 || (! empty($_SESSION['id']) && $v['use'] == 2)) && hesk_is_custom_field_in_category($k, $ticket['category'])) {
|
||||
if ($num_cols == 3) {
|
||||
echo '</tr><tr>';
|
||||
$num_cols = 0;
|
||||
}
|
||||
|
||||
switch ($v['type']) {
|
||||
case 'date':
|
||||
$ticket[$k] = hesk_custom_date_display_format($ticket[$k], $v['value']['date_format']);
|
||||
break;
|
||||
}
|
||||
?>
|
||||
<td bgcolor="#EEE"><b><?php echo $v['name']; ?>:</b></td>
|
||||
<td bgcolor="#DDD"><?php echo hesk_unhortenUrl($ticket[$k]); ?></td>
|
||||
<?php
|
||||
$num_cols++;
|
||||
}
|
||||
}
|
||||
|
||||
// Close ticket head table
|
||||
echo '</table><br>';
|
||||
|
||||
// Print initial ticket message
|
||||
if ($ticket['message'] != '') {
|
||||
$newMessage = hesk_unhortenUrl($ticket['message']);
|
||||
if ($ticket['html']) {
|
||||
$newMessage = hesk_html_entity_decode($newMessage);
|
||||
}
|
||||
echo '<p>' . $newMessage . '</p>';
|
||||
}
|
||||
|
||||
|
||||
// Print replies
|
||||
while ($reply = hesk_dbFetchAssoc($res)) {
|
||||
$reply['dt'] = hesk_date($reply['dt'], true);
|
||||
$theReply = hesk_unhortenUrl($reply['message']);
|
||||
if ($reply['html']) {
|
||||
$theReply = hesk_html_entity_decode($theReply);
|
||||
}
|
||||
|
||||
echo '
|
||||
<hr />
|
||||
|
||||
<table border="1" bordercolor="#FFFFFF" cellspacing="0" cellpadding="2" width="100%">
|
||||
<tr>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['date'] . ':</b></td><td bgcolor="#DDD">' . $reply['dt'] . '</td>
|
||||
<td bgcolor="#EEE"><b>' . $hesklang['name'] . ':</b></td><td bgcolor="#DDD">' . $reply['name'] . '</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="message">' . $theReply . '</div>
|
||||
';
|
||||
}
|
||||
|
||||
// Print "end of ticket" message
|
||||
echo '<div style="page-break-after: always">' . $hesklang['end_ticket'] . "</div>";
|
@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* This file is part of HESK - PHP Help Desk Software.
|
||||
*
|
||||
* (c) Copyright Klemen Stirn. All rights reserved.
|
||||
* https://www.hesk.com
|
||||
*
|
||||
* For the full copyright and license agreement information visit
|
||||
* https://www.hesk.com/eula.php
|
||||
*
|
||||
*/
|
||||
|
||||
/* Check if this is a valid include */
|
||||
if (!defined('IN_SCRIPT')) {die('Invalid attempt');}
|
||||
|
||||
|
||||
/*** FUNCTIONS ***/
|
||||
|
||||
|
||||
function hesk_anonymizeTicket($id, $trackingID = null, $have_ticket = false)
|
||||
{
|
||||
global $hesk_settings, $hesklang;
|
||||
|
||||
// Do we already have ticket info?
|
||||
if ($have_ticket)
|
||||
{
|
||||
global $ticket;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get ticket info by tracking or numerical ID
|
||||
if ($trackingID !== null)
|
||||
{
|
||||
$res = hesk_dbQuery("SELECT `id`, `trackid`, `name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `trackid`='".hesk_dbEscape($trackingID)."' AND ".hesk_myOwnership());
|
||||
}
|
||||
else
|
||||
{
|
||||
$res = hesk_dbQuery("SELECT `id`, `trackid`, `name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `id`=".intval($id)." AND ".hesk_myOwnership());
|
||||
}
|
||||
if ( ! hesk_dbNumRows($res))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$ticket = hesk_dbFetchAssoc($res);
|
||||
}
|
||||
|
||||
// Delete attachment files
|
||||
$res = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."attachments` WHERE `ticket_id`='".hesk_dbEscape($ticket['trackid'])."'");
|
||||
if (hesk_dbNumRows($res))
|
||||
{
|
||||
$hesk_settings['server_path'] = dirname(dirname(__FILE__));
|
||||
|
||||
while ($file = hesk_dbFetchAssoc($res))
|
||||
{
|
||||
hesk_unlink($hesk_settings['server_path'].'/'.$hesk_settings['attach_dir'].'/'.$file['saved_name']);
|
||||
}
|
||||
}
|
||||
|
||||
// Delete attachments info from the database
|
||||
hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."attachments` WHERE `ticket_id`='".hesk_dbEscape($ticket['trackid'])."'");
|
||||
|
||||
// Anonymize ticket
|
||||
$sql = "UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` SET
|
||||
`name` = '".hesk_dbEscape($hesklang['anon_name'])."',
|
||||
`email` = '".hesk_dbEscape($hesklang['anon_email'])."',
|
||||
`subject` = '".hesk_dbEscape($hesklang['anon_subject'])."',
|
||||
`message` = '".hesk_dbEscape($hesklang['anon_message'])."',
|
||||
`ip` = '".hesk_dbEscape($hesklang['anon_IP'])."',
|
||||
`latitude`= 'E-6',
|
||||
`longitude`='E-6',
|
||||
`user_agent`= '" . hesk_dbEscape($hesklang['anon_user_agent']) . "',
|
||||
`screen_resolution_width`= '" . hesk_dbEscape($hesklang['anon_screen_resolution']) . "',
|
||||
`screen_resolution_height`= '" . hesk_dbEscape($hesklang['anon_screen_resolution']) . "',
|
||||
";
|
||||
for($i=1; $i<=50; $i++)
|
||||
{
|
||||
$sql .= "`custom{$i}` = '',";
|
||||
}
|
||||
$sql .= "
|
||||
attachments='',
|
||||
`history`=REPLACE(`history`, ' ".hesk_dbEscape(addslashes($ticket['name']))."</li>', ' ".hesk_dbEscape($hesklang['anon_name'])."</li>')
|
||||
WHERE `id`='".intval($ticket['id'])."'";
|
||||
hesk_dbQuery($sql);
|
||||
mfh_anonymize_audit_trail_records($ticket['id'],'TICKET', $ticket['name']);
|
||||
|
||||
// Anonymize replies
|
||||
hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` SET `name` = '".hesk_dbEscape($hesklang['anon_name'])."', `message` = '".hesk_dbEscape($hesklang['anon_message'])."', attachments='' WHERE `replyto`='".intval($ticket['id'])."'");
|
||||
|
||||
// Delete ticket notes
|
||||
hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."notes` WHERE `ticket`='".intval($ticket['id'])."'");
|
||||
|
||||
// Delete ticket reply drafts
|
||||
hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."reply_drafts` WHERE `ticket`=".intval($ticket['id']));
|
||||
|
||||
return true;
|
||||
} // END hesk_anonymizeTicket()
|
@ -0,0 +1,695 @@
|
||||
<?php
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK pre-1.2
|
||||
$hesklang['search_the_knowledgebase'] = 'Search the Knowledgebase';
|
||||
$hesklang['view_ticket_nav']='View Ticket';
|
||||
$hesklang['quick_help']='Quick Help';
|
||||
$hesklang['quick_help_submit_ticket']='Please fill out the form on the right to submit a ticket. Required fields are marked with a <span class="important">*</span>.';
|
||||
$hesklang['quick_help_view_ticket']='Please fill out the required information on the right to view your ticket. If you forgot your Ticket tracking ID, click "Forgot tracking ID".';
|
||||
$hesklang['information']='Information';
|
||||
$hesklang['admin_sidebar_ticket_id']='TICKET ID';
|
||||
$hesklang['priorityChange']=' - - Change Priority - - ';
|
||||
$hesklang['statusChange']=' - - Change Status - - ';
|
||||
$hesklang['ownerChange']=' - - Change Owner - - ';
|
||||
$hesklang['categoryChange']=' - - Change Category - - ';
|
||||
$hesklang['navigation']='Navigation';
|
||||
$hesklang['nti']='New ticket';
|
||||
$hesklang['savedResponses']='Saved Responses';
|
||||
$hesklang['add_ticket_general_information']='General Information';
|
||||
$hesklang['add_ticket_your_message']='Your Message';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.2
|
||||
$hesklang['statuses'] = 'Statuses';
|
||||
$hesklang['basicProperties'] = 'Basic Properties';
|
||||
$hesklang['textColor'] = 'Text Color';
|
||||
$hesklang['textColorDescr'] = 'This is the hex color code for the status that will be used on the ticket search page and export search page';
|
||||
$hesklang['closedQuestionMark'] = 'Closed?';
|
||||
$hesklang['closedQuestionMarkDescr'] = 'If checked, tickets will be considered closed if they are set to this status.';
|
||||
$hesklang['basicProperties'] = 'Basic Properties';
|
||||
$hesklang['defaultStatusForAction'] = 'Default Status For Action';
|
||||
$hesklang['isClosedByClientMsg'] = 'When a client clicks the "Close ticket" link, change the status to';
|
||||
$hesklang['isStaffClosedOptionMsg'] = 'When a staff member clicks the "Close ticket" link, change the status to';
|
||||
$hesklang['isStaffReopenedStatusMsg'] = 'When a staff member clicks the "Open ticket" link, change the status to';
|
||||
$hesklang['isDefaultStaffReplyStatusMsg'] = 'When a staff member replies to a ticket, change the status to';
|
||||
$hesklang['lockedTicketStatusMsg'] = 'When a ticket is locked, change the status to';
|
||||
$hesklang['textColorRequired'] = 'Text Color is required.';
|
||||
$hesklang['addNew'] = 'Add New';
|
||||
$hesklang['close_action']='Close Ticket'; // Close ACTION
|
||||
$hesklang['whyCantIDeleteThisStatus'] = "Why Can't I Delete This Status?";
|
||||
$hesklang['whyCantIDeleteThisStatusReason'] = 'This status cannot be deleted because it is being used as a default status for a particular action.';
|
||||
$hesklang['isNewTicketMsg'] = 'When a new ticket is created, set its status to';
|
||||
$hesklang['isRepliedByClientMsg'] = 'When a client replies to a ticket, set its status to';
|
||||
$hesklang['close_this_ticket']='Close ticket';
|
||||
$hesklang['closed']='closed';
|
||||
$hesklang['resolved']='Resolved'; // Ticket has been RESOLVED
|
||||
$hesklang['quick_help_ticket']='Here is the information on your ticket. You can add a reply to this ticket, close it, or re-open the ticket if applicable.';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.2.2
|
||||
$hesklang['changeLanguage'] = 'Change language to';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.4.0
|
||||
$hesklang['navbarBackgroundColor'] = 'Navbar Background Color';
|
||||
$hesklang['navbarBackgroundColorHelp'] = 'The main color of the top navigation bar. This applies only to the client-side.';
|
||||
$hesklang['navbarBrandColor'] = 'Navbar Brand Color';
|
||||
$hesklang['navbarBrandColorHelp'] = 'The text color of the \'brand\' on the left (also the name of the Help Desk).';
|
||||
$hesklang['navbarBrandHoverColor'] = 'Navbar Brand Hover Color';
|
||||
$hesklang['navbarBrandHoverColorHelp'] = 'The text color of the \'brand\' on the left when the use moves their mouse over the text.';
|
||||
$hesklang['navbarItemTextColor'] = 'Navbar Item Text Color';
|
||||
$hesklang['navbarItemTextColorHelp'] = 'The text color of the navigation items on the navigation bar.';
|
||||
$hesklang['navbarItemTextHoverColor'] = 'Navbar Item Text Hover Color';
|
||||
$hesklang['navbarItemTextHoverColorHelp'] = 'The text color of the navigation items on the navigation bar when the user hovers over one of the items.';
|
||||
$hesklang['navbarItemTextSelectedColor'] = 'Navbar Item Text Selected Color';
|
||||
$hesklang['navbarItemTextSelectedColorHelp'] = 'The text color of the navigation items on the navigation bar when the user clicks on an item, and a dropdown menu appears (such as \'Ticket\').';
|
||||
$hesklang['navbarItemSelectedBackgroundColor'] = 'Navbar Item Selected Background Color';
|
||||
$hesklang['navbarItemSelectedBackgroundColorHelp'] = 'The background color of the navigation items on the navigation bar when the user clicks on an item, and a dropdown menu appears (such as \'Ticket\').';
|
||||
$hesklang['dropdownItemTextColor'] = 'Dropdown Item Text Color';
|
||||
$hesklang['dropdownItemTextColorHelp'] = 'The text color of a dropdown item.';
|
||||
$hesklang['dropdownItemTextHoverColor'] = 'Dropdown Item Text Hover Color';
|
||||
$hesklang['dropdownItemTextHoverColorHelp'] = 'The text color of a dropdown item when the mouse hovers over it.';
|
||||
$hesklang['questionMarkColor'] = 'Question Mark Color';
|
||||
$hesklang['questionMarkColorHelp'] = 'The text color for the question mark circle, as seen on the \'Settings\' page and on other various pages.';
|
||||
$hesklang['dropdownItemTextHoverBackgroundColor'] = 'Dropdown Item Text Hover Background Color';
|
||||
$hesklang['dropdownItemTextHoverBackgroundColorHelp'] = 'The background color of a dropdown item when the mouse hovers over it.';
|
||||
$hesklang['uiColors'] = 'UI Colors';
|
||||
$hesklang['displayRtl'] = 'Display site right-to-left';
|
||||
$hesklang['displayRtlHelp'] = 'Check this to set the text direction to right-to-left.';
|
||||
$hesklang['showIcons'] = 'Show Icons';
|
||||
$hesklang['showIconsHelp'] = 'Check this box to show icons next to navigation bar items';
|
||||
$hesklang['maintenanceMode'] = 'Maintenance Mode';
|
||||
$hesklang['maintenanceModeHelp'] = 'Check this box to put the Help Desk in maintenance mode. Staff can still log into the backend, but the front end will be inaccessible.';
|
||||
$hesklang['none'] = 'None';
|
||||
$hesklang['autorefresh'] = 'Autorefresh:';
|
||||
$hesklang['autorefresh_restrictions'] = 'Enter value in milliseconds. Value must be greater than 1000 to use this feature. No fractional values.';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.5.0
|
||||
$hesklang['ticket_auto_refresh'] = 'Ticket Table Auto-Refresh:';
|
||||
$hesklang['display_rtl'] = 'Display site right-to-left';
|
||||
$hesklang['show_icons_navigation'] = 'Show icons on navigation bar';
|
||||
$hesklang['enable_maintenance'] = 'Enable maintenance mode';
|
||||
$hesklang['can_man_settings']='Can manage help desk settings';
|
||||
$hesklang['disable_user'] = 'User is active (click to deactivate)';
|
||||
$hesklang['enable_user'] = 'User is inactive (click to activate)';
|
||||
$hesklang['user_activated'] = 'User has been activated';
|
||||
$hesklang['user_deactivated'] = 'User has been deactivated';
|
||||
$hesklang['active_user'] = 'Is active user';
|
||||
$hesklang['self_deactivation'] = 'You cannot deactivate yourself!';
|
||||
$hesklang['inactive_user'] = 'Your account is currently inactive. Contact an administrator for more information.';
|
||||
$hesklang['cant_edit_admin'] = 'You cannot edit the God Admin (User ID = 1)';
|
||||
$hesklang['notifications_disabled_info'] = 'Changing notifications settings has been disabled by your administrator.';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.6.0
|
||||
$hesklang['notify_note_unassigned'] = 'Someone adds a note to a ticket not assigned to me';
|
||||
$hesklang['can_change_notification_settings'] = 'Can change notification settings';
|
||||
$hesklang['add_row'] = 'Add row';
|
||||
$hesklang['addnote'] = 'Add note';
|
||||
$hesklang['mods_for_hesk'] = 'Mods for HESK';
|
||||
$hesklang['err_modsForHesk_settings'] = 'Can\'t open file <b>modsForHesk_settings.inc.php</b> for writing. Please CHMOD this file to 666 (rw-rw-rw-)';
|
||||
$hesklang['mods_for_hesk_version'] = 'Mods for HESK Version';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.7.0
|
||||
$hesklang['date_custom_field'] = 'Date';
|
||||
$hesklang['date_custom_field_text'] = 'No options for this custom field type.';
|
||||
$hesklang['multiple_select_custom_field'] = 'Multiple Select box';
|
||||
$hesklang['multiple_select_custom_field_text'] = 'Options for this multi-select box, enter one option per line (each line will be a choice your customers can choose from). You need to enter at least two options!';
|
||||
$hesklang['date_format'] = 'Date must be in YYYY-MM-DD format.';
|
||||
$hesklang['custom_field_setting'] = 'Multilanguage support';
|
||||
$hesklang['custom_field_setting_help'] = 'Enabling this setting will use the name of the custom field as the language
|
||||
file\'s key, rather than the direct name itself. This allows the custom field to be translated into different languages.';
|
||||
$hesklang['enable_custom_field_language'] = 'Enable multilanguage support';
|
||||
$hesklang['custom_language_key'] = 'Field language file key';
|
||||
$hesklang['ticket_reopen_assigned'] = '[#%%TRACK_ID%%] Assigned ticket reopened';
|
||||
$hesklang['verify_email'] = 'Verify Email';
|
||||
$hesklang['email_verified'] = 'The email address <b>%s</b> has been verified. Additionally, the following tickets have been created:'; //%s: email address
|
||||
$hesklang['verify_no_records'] = 'No records were found for this activation key. Has this activation key already been used?';
|
||||
$hesklang['activation_key'] = 'Activation Key';
|
||||
$hesklang['no_tickets_created'] = 'No tickets created';
|
||||
$hesklang['customer_email_verification'] = 'Customer Email Verifications';
|
||||
$hesklang['customer_email_verification_help'] = 'Require customers to verify their email address via email. Once their
|
||||
address has been verified, it does not need to be re-verified in the future. <br><br> <b>NOTE:</b> Enabling this will disable the
|
||||
ability for the customer to provide multiple emails, as HESK will be unable to determine which email needs to be verified.';
|
||||
$hesklang['require_customer_validate_email'] = 'Require customers to verify email';
|
||||
$hesklang['multi_eml_disabled'] = 'This feature has been disabled because this help desk has been configured to require
|
||||
customers to verify their email address';
|
||||
$hesklang['feature_disabled'] = 'Feature Disabled';
|
||||
$hesklang['verify_your_email'] = 'Your ticket has been created; however your email needs to be verified before your ticket can be addressed. An email has been sent to the email provided for verification.';
|
||||
$hesklang['installation_information'] = 'Installation Information';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods For HESK 2.0.0
|
||||
$hesklang['saved_ticket_tpl'] = 'Saved Templates';
|
||||
$hesklang['new_ticket_tpl']='Add or Edit a Ticket Template';
|
||||
$hesklang['and_change_status_to'] = 'and change status to'; // Used in combination with $hesklang['submit_reply'] (Reads as "Submit reply and change status to")
|
||||
$hesklang['closed_title'] = 'Closed';
|
||||
$hesklang['image'] = 'Image';
|
||||
$hesklang['close_modal'] = 'Close';
|
||||
$hesklang['email_custom_field'] = 'Email Address';
|
||||
$hesklang['email_custom_field_help'] = 'Allows the input of an email address. Similar to a text field, however the email address(es) will be added to all emails for this ticket, in the Cc or Bcc section, depending on the option selected.';
|
||||
$hesklang['email_custom_field_label'] = 'Address Type';
|
||||
$hesklang['cc'] = 'Cc:';
|
||||
$hesklang['bcc'] = 'Bcc:';
|
||||
$hesklang['mailgun'] = 'Mailgun';
|
||||
$hesklang['mailgun_help'] = 'Send mail using the Mailgun API. For more information on Mailgun, visit https://www.mailgun.com';
|
||||
$hesklang['mailgun_api_key'] = 'Mailgun API Key';
|
||||
$hesklang['mailgun_api_key_help'] = 'Your API key for Mailgun.';
|
||||
$hesklang['mailgun_domain'] = 'Mailgun Domain';
|
||||
$hesklang['mailgun_domain_help'] = 'Your registered domain for Mailgun';
|
||||
$hesklang['html_emails'] = 'HTML Emails';
|
||||
$hesklang['html_emails_help'] = 'Send HTML-supported emails to staff and customers.<br><br>To use this feature, create a new folder called <b>html</b> in your
|
||||
language\'s <b>emails</b> folder and create templates for each email file. Both the HTML and plaintext versions will be sent (recipient\'s email program will
|
||||
properly display either the HTML or plaintext version, depending on their mail client\'s settings).';
|
||||
$hesklang['html_emails_text'] = 'Enable HTML-formatted emails';
|
||||
$hesklang['beta_text'] = 'BETA';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.1.0
|
||||
$hesklang['e_mfh_settings'] = 'You will not be able to save your settings unless this file is writable by the script (CHMOD to 666)!';
|
||||
$hesklang['mfh_up_to_date'] = 'Mods for HESK is up to date';
|
||||
$hesklang['use_bootstrap_theme'] = 'Use Boostrap Theme CSS';
|
||||
$hesklang['use_bootstrap_theme_help'] = 'Enable this to use the <code>bootstrap-theme.css</code> file. Use this for a more 3D look and feel, or disable it for a flatter look.';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.1.1
|
||||
$hesklang['new_article_default_type'] = 'Default Type for New Articles';
|
||||
$hesklang['new_article_default_type_help'] = 'Choose the default type for new knowledgebase articles.';
|
||||
$hesklang['kb_draft3'] = 'The article is saved but not yet published. It can only be read by staff who has permission to
|
||||
manage knowledgebase articles.'; // This is exactly the same as kb_draft2 with all HTML removed
|
||||
$hesklang['file_name'] = 'File Name';
|
||||
$hesklang['action'] = 'Action';
|
||||
$hesklang['click_to_preview'] = 'Click to preview';
|
||||
$hesklang['attachment_removed'] = 'This attachment has been removed and cannot be viewed / downloaded';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.2.0
|
||||
$hesklang['email_templates'] = 'Email templates';
|
||||
$hesklang['email_templates_intro'] = 'You can edit your plaintext and HTML email templates here.';
|
||||
$hesklang['edit_plain_text_template'] = 'Edit plain text template';
|
||||
$hesklang['edit_html_template'] = 'Edit HTML template';
|
||||
$hesklang['editing_plain_text_template'] = 'Editing plain text template <code>%s</code>'; // %s: The name of the template file, then language name
|
||||
$hesklang['editing_html_template'] = 'Editing HTML template <code>%s</code>'; // %s: The name of the template file, then language name
|
||||
$hesklang['show_special_tags'] = 'Show Special Tags';
|
||||
$hesklang['hide_special_tags'] = 'Hide Special Tags';
|
||||
$hesklang['special_tag'] = 'Special Tag';
|
||||
$hesklang['description'] = 'Description';
|
||||
$hesklang['customer_name'] = 'Customer name';
|
||||
$hesklang['customer_email'] = 'Customer email';
|
||||
$hesklang['ticket_subject'] = 'Ticket subject';
|
||||
$hesklang['ticket_message'] = 'Ticket/Reply message';
|
||||
$hesklang['ticket_created'] = 'Date and time of ticket submission';
|
||||
$hesklang['ticket_updated'] = 'Date and time of ticket last update';
|
||||
$hesklang['ticket_url'] = 'Ticket URL address';
|
||||
$hesklang['ticket_category'] = 'Ticket category';
|
||||
$hesklang['ticket_owner'] = 'Staff member assigned to the ticket';
|
||||
$hesklang['ticket_priority'] = 'Ticket priority';
|
||||
$hesklang['custom_field_x'] = 'Custom field %s'; // %s: Custom field #1-20
|
||||
$hesklang['email_template_saved'] = 'The email template <b>%s</b> has been saved.'; // %s: Template file name
|
||||
$hesklang['error_saving_template'] = 'An error occurred when trying to save the email template!';
|
||||
$hesklang['can_man_email_tpl'] = 'Edit email templates';
|
||||
$hesklang['email_template_directory_not_writable'] = 'The email template <b>%s</b> is not writable by HESK. Please CHMOD it to 0666.'; // %s: template file name
|
||||
$hesklang['closable_question'] = 'Closable?';
|
||||
$hesklang['closable_description'] = '<b><i>This setting is ignored if the "Closed?" setting is set to "Yes" for this status</i></b>.
|
||||
<br><br>Determines if the customer and/or staff is able to close a ticket in this status.
|
||||
<br><br><b>Yes:</b> Both customers and staff can close a ticket in this status.
|
||||
<br><b>Customers only:</b> Customers can close a ticket in this status, but staff cannot.
|
||||
<br><b>Staff only:</b> Staff can close a ticket in this status, but customers cannot.
|
||||
<br><b>No:</b> No one is allowed to close a ticket in this status.'; // " = "
|
||||
$hesklang['customers_only'] = 'Customers only';
|
||||
$hesklang['staff_only'] = 'Staff only';
|
||||
$hesklang['yes_title_case'] = 'Yes';
|
||||
$hesklang['no_title_case'] = 'No';
|
||||
$hesklang['autoclose_ticket_status'] = 'When a ticket is closed automatically, change the status to';
|
||||
$hesklang['recent_tickets'] = 'Recent tickets';
|
||||
$hesklang['current_status_colon'] = 'Current status: %s'; // %s: status name (i.e. "Resolved", "New", etc.)
|
||||
$hesklang['email_attachments'] = 'Email attachments';
|
||||
$hesklang['email_attachments_help'] = '<b>Show attachments as links:</b> Links to attachments will be appended at the end of the email.
|
||||
<br><br><b>Attach directly to email:</b> Attachments will be embedded directly into emails.';
|
||||
$hesklang['show_attachments_as_links'] = 'Show attachments as links';
|
||||
$hesklang['attach_directly_to_email'] = 'Attach directly to email';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.2.1
|
||||
$hesklang['popart_no_colon']='Top Knowledgebase Articles'; // same as $hesklang['popart'] but without a colon (:)
|
||||
$hesklang['latart_no_colon']='Latest Knowledgebase Articles'; // same as $hesklang['latart'] but without a colon (:)
|
||||
$hesklang['ac_no_colon']='Articles in this Category'; // same as $hesklang['ac'] but without a colon (:)
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.3.0
|
||||
$hesklang['sm_icon'] = 'Icon';
|
||||
$hesklang['sm_icon_type'] = 'Icon Type';
|
||||
$hesklang['sm_no_icon'] = 'No Icon';
|
||||
$hesklang['sm_search_icon'] = 'Search Icon';
|
||||
$hesklang['sm_iconpicker_footer_label'] = '{0} - {1} of {2}'; // {0}: lower bound of page, {1}: upper bound of page, {2}: total number of icons
|
||||
$hesklang['mods_for_hesk_acronym'] = 'MFH'; // THIS SHOULD NOT BE TRANSLATED
|
||||
$hesklang['added_in_mods_for_hesk'] = 'Added in Mods for HESK';
|
||||
$hesklang['statuses_intro'] = 'Here you can add, remove, and modify ticket statuses, as well as changing the default status for particular actions.';
|
||||
$hesklang['statuses_saved'] = 'Ticket statuses have been updated!';
|
||||
$hesklang['email_template_not_saved'] = 'The email template <b>%s</b> was NOT saved due to an error. Enable debug mode to see if an error message appears, and ensure that your file has CHMOD 0666'; // %s: Template file name
|
||||
$hesklang['language_key'] = 'Language Key';
|
||||
$hesklang['language_key_description'] = 'This is the language file \'key\' that contains the text you want to display';
|
||||
$hesklang['can_man_ticket_statuses'] = 'Can manage ticket statuses';
|
||||
$hesklang['key_required'] = 'Keys are required for all statuses';
|
||||
$hesklang['x_merged'] = '(+%s merged)'; // %s number of tickets merged
|
||||
$hesklang['merged_tickets'] = 'Merged tickets: ';
|
||||
$hesklang['show_number_merged'] = 'Show number of tickets merged';
|
||||
$hesklang['show_number_merged_descr'] = 'Show number of tickets merged next to Tracking ID';
|
||||
$hesklang['show_number_merged_help'] = 'If enabled, the user will be able to see which tickets were merged into the other on the ticket search screen.';
|
||||
$hesklang['latest_top_on_home'] = 'Latest/Top articles on home page';
|
||||
$hesklang['latest_top_on_home_help'] = 'Select YES to display the top and latest knowledgebase articles on the home page.
|
||||
Otherwise, a link to the knowledgebase will appear on the home page.';
|
||||
$hesklang['location_unavailable'] = "Location unavailable. Click for more information.";
|
||||
$hesklang['click_for_map'] = "View map of user's location";
|
||||
$hesklang['request_user_location'] = "Request Location";
|
||||
$hesklang['request_user_location_help'] = "If enabled, the help desk will ask for the customer's location, allowing staff to
|
||||
see a map of the customer's location when they created the ticket.";
|
||||
$hesklang['users_location'] = "User's Location";
|
||||
$hesklang['location_unavailable_0'] = "User's location is not available because the ticket was created before location tracking was enabled.";
|
||||
$hesklang['location_unavailable_1'] = "User's location is not available because the user refused to share it.";
|
||||
$hesklang['location_unavailable_2'] = "User's location is not available because the help desk was unable to determine the user's position.";
|
||||
$hesklang['location_unavailable_3'] = "User's location is not available because the help desk was not able to determine the user's position in
|
||||
a reasonable amount of time.";
|
||||
$hesklang['location_unavailable_4'] = "An unknown error occurred when trying to obtain the user's location.";
|
||||
$hesklang['location_unavailable_5'] = "User's location is not available because the user's browser did not meet the minimum
|
||||
requirements for tracking their location when the ticket was submitted.";
|
||||
$hesklang['save_location'] = 'Save Location';
|
||||
$hesklang['close_modal_without_saving'] = 'Close without saving';
|
||||
$hesklang['ticket_location_updated'] = 'Ticket location has been updated!';
|
||||
$hesklang['location_colon'] = 'Location:';
|
||||
$hesklang['your_current_location'] = 'Your location';
|
||||
$hesklang['requesting_location_ellipsis'] = 'Requesting location...';
|
||||
$hesklang['unable_to_determine_location'] = 'Unable to determine your location, or you declined to share it.';
|
||||
$hesklang['save_to_see_updated_address'] = 'Save the new location to see the updated address';
|
||||
$hesklang['manager'] = 'Manager';
|
||||
$hesklang['manager_updated'] = 'Category manager has been updated.';
|
||||
$hesklang['can_set_manager'] = 'Can set category managers';
|
||||
$hesklang['no_manager'] = 'No manager';
|
||||
$hesklang['number_of_users'] = 'Number of Users';
|
||||
$hesklang['actions'] = 'Actions';
|
||||
$hesklang['staff_cannot_be_admin'] = 'Staff permission group does not have admin access, and cannot be set as an admin';
|
||||
$hesklang['admin_cannot_be_staff'] = 'Administrator permission group has admin access, and cannot be set as non-admin';
|
||||
$hesklang['template_is_admin_cannot_change'] = 'The permission group currently has admin privileges, so you cannot set specific permissions here.';
|
||||
$hesklang['you_must_select_a_category'] = 'You must select at least one category.';
|
||||
$hesklang['you_must_select_a_feature'] = 'You must select at least one feature.';
|
||||
$hesklang['custom'] = 'Custom';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.4.0
|
||||
$hesklang['sort_by_user_defined_order'] = 'Sort by user-defined order';
|
||||
$hesklang['sort_alphabetically'] = 'Sort alphabetically';
|
||||
$hesklang['category_sort'] = 'Category Sorting';
|
||||
$hesklang['category_sort_help'] = 'Determines if categories shown on the manage categories page and all dropdowns are sorted by the user-defined order (default), or
|
||||
sorted alphabetically.';
|
||||
$hesklang['quick_help_sections'] = 'Quick Help Sections';
|
||||
$hesklang['quick_help_sections_help'] = 'Check the checkbox to show the "Quick Help" sections on the left-hand side, or uncheck to not show.';
|
||||
$hesklang['create_ticket'] = 'Create ticket (customers)';
|
||||
$hesklang['view_ticket_form'] = 'View ticket form';
|
||||
$hesklang['knowledgebase'] = 'Knowledgebase section';
|
||||
$hesklang['staff_create_ticket'] = 'Create ticket (staff)';
|
||||
$hesklang['allow_rich_text_for_tickets'] = 'Allow rich text for tickets';
|
||||
$hesklang['allow_rich_text_for_tickets_help'] = 'Allow staff and customers to use rich text formatting when writing ticket messages / replies.';
|
||||
$hesklang['click_to_edit_name'] = 'Click to edit name';
|
||||
$hesklang['new_status'] = 'New Status';
|
||||
$hesklang['create_new_status_title'] = 'Create New Status';
|
||||
$hesklang['status_name_title'] = 'Status Name';
|
||||
$hesklang['status_name_title_help'] = 'The name of the status that should appear when viewing the ticket, for each language you have installed.';
|
||||
$hesklang['properties'] = 'Properties';
|
||||
$hesklang['closable'] = 'Closable'; // Same as $hesklang['closable_question'], but without punctuation
|
||||
$hesklang['new_status_created'] = 'New status successfully created';
|
||||
$hesklang['editing_status_x'] = 'Editing status <span style="color: %s; font-weight: bold">%s</span>'; // 1st %s: text color, 2nd %s: status name
|
||||
$hesklang['status_not_in_database'] = 'The status text for this language was not found in the database, so a suggested translation has been filled for you.
|
||||
Please click "Save Changes" to save this translation to the database and to remove this warning.';
|
||||
$hesklang['ticket_status_updated'] = 'Ticket status successfully updated!';
|
||||
$hesklang['ticket_status_deleted'] = 'Ticket status deleted!';
|
||||
$hesklang['confirm_delete_status_question'] = 'Delete status?';
|
||||
$hesklang['confirm_delete_status'] = 'Are you sure you want to delete this status? This cannot be undone!';
|
||||
$hesklang['status_sort_updated'] = 'Ticket status sort updated!';
|
||||
$hesklang['status_sort'] = 'Status Sorting';
|
||||
$hesklang['status_sort_help'] = 'Determines if statuses shown on the manage statuses page and all dropdowns are sorted by the user-defined order (default), or sorted alphabetically.';
|
||||
$hesklang['cannot_delete_status_tickets'] = 'This status cannot be deleted because there are tickets set to this status.';
|
||||
$hesklang['default_statuses_updated'] = 'Default statuses have been updated!';
|
||||
$hesklang['download_count'] = 'Download Count';
|
||||
$hesklang['kb_attach_dir'] = 'Knowledgebase attachments folder';
|
||||
$hesklang['kb_attach_dir_help'] = 'Name of the folder, where knowledgebase attachments will be stored.<br><br>The folder needs to exist within the main HESK folder and be writable by PHP. On most systems names are CaSe SeNSiTiVe.
|
||||
<br><br>Allowed chars (other will be removed): a-z A-Z 0-9 _ -';
|
||||
$hesklang['ticket_attach_dir'] = 'Ticket attachments folder';
|
||||
$hesklang['cannot_edit_status_demo'] = 'You cannot edit statuses while in demo mode!';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.5.0
|
||||
$hesklang['ticket_message_no_attachments'] = 'Ticket/Reply message, however attachments will not be included in the email';
|
||||
$hesklang['click_for_device_information'] = 'Click for device information';
|
||||
$hesklang['device_information'] = 'Device information';
|
||||
$hesklang['operating_system'] = 'Operating System';
|
||||
$hesklang['browser'] = 'Browser';
|
||||
$hesklang['screen_resolution'] = 'Screen Resolution';
|
||||
$hesklang['display_user_agent_information'] = 'Show user agent';
|
||||
$hesklang['display_user_agent_information_help'] = 'When enabled, staff will be able to view the operating system, browser,
|
||||
and screen resolution of the device used to create the ticket.';
|
||||
$hesklang['value_colon'] = 'Value:';
|
||||
$hesklang['hidden_custom_field'] = 'Hidden text field';
|
||||
$hesklang['hidden_custom_field_help'] = 'This input is the same as a text field; however this value cannot be changed and will not be visible to the user.';
|
||||
$hesklang['readonly_custom_field'] = 'Read-only text field';
|
||||
$hesklang['readonly_custom_field_help'] = 'This input is the same as a text field; however this value cannot be changed, but will be visible to the user.';
|
||||
$hesklang['navbar_title_url'] = 'Navbar Title URL';
|
||||
$hesklang['navbar_title_url_help'] = 'Enter the URL you wish to use when a customer (or staff) clicks on the help desk title on the top-left corner of the screen. The URL must begin with http:// or https://.';
|
||||
$hesklang['this_field_is_required'] = 'This field is required';
|
||||
$hesklang['select_at_least_one_value'] = 'Please select at least one value';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.5.2
|
||||
$hesklang['manage_statuses'] = 'Manage Statuses';
|
||||
$hesklang['manage_service_messages'] = 'Manage Service Messages';
|
||||
$hesklang['manage_banned_ips'] = 'Manage Banned IPs';
|
||||
$hesklang['manage_banned_emails'] = 'Manage Banned Emails';
|
||||
$hesklang['manage_email_templates'] = 'Manage Email Templates';
|
||||
$hesklang['linked_tickets'] = 'Linked tickets';
|
||||
$hesklang['add_ticket'] = 'Add Ticket';
|
||||
$hesklang['cannot_link_ticket_to_itself'] = 'You cannot link a ticket to itself!';
|
||||
$hesklang['linked_ticket_does_not_exist'] = '<strong>%s</strong> is not a valid Tracking ID!'; //%s: the child tracking ID
|
||||
$hesklang['is_already_linked'] = '<strong>%s</strong> is already linked to this ticket.'; //%s: the child tracking ID
|
||||
$hesklang['link_added'] = 'Successfully linked <strong>%s</strong> to this ticket.'; //%s: the child tracking ID
|
||||
$hesklang['ticket_no_longer_linked'] = 'Ticket is no longer linked.';
|
||||
$hesklang['unlink'] = 'Unlink';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 2.6.0
|
||||
$hesklang['search_logs'] = 'Search Logs';
|
||||
$hesklang['date_logged'] = 'Date Logged';
|
||||
$hesklang['from_date'] = 'From Date';
|
||||
$hesklang['to_date'] = 'To Date';
|
||||
$hesklang['severity'] = 'Severity';
|
||||
$hesklang['debug'] = 'Debug';
|
||||
$hesklang['warning_title_case'] = 'Warning';
|
||||
$hesklang['logs'] = 'Logs';
|
||||
$hesklang['view_message_log'] = 'View Message Log';
|
||||
$hesklang['can_view_logs'] = 'Can view message logs';
|
||||
$hesklang['attachment_viewer_message'] = "Drag files here or click the 'Add File' button below to select files to upload.";
|
||||
$hesklang['attachment_invalid_type_message'] = 'Sorry, but the file type you tried to upload is not allowed.';
|
||||
$hesklang['attachment_upload_error'] = 'An error occurred when trying to upload. Please try again later.';
|
||||
$hesklang['attachment_too_large'] = 'This attachment is larger than the max filesize permitted.';
|
||||
$hesklang['attachment_cancel'] = 'Cancel';
|
||||
$hesklang['attachment_confirm_cancel'] = 'Are you sure you want to cancel this upload?';
|
||||
$hesklang['attachment_remove'] = 'Remove attachment';
|
||||
$hesklang['due_date'] = 'Due Date';
|
||||
$hesklang['category_updated'] = 'Changes to <i>%s</i> have been saved';
|
||||
$hesklang['new_event'] = 'New Event';
|
||||
$hesklang['create_event'] = 'Create Event';
|
||||
$hesklang['event_title'] = 'Title';
|
||||
$hesklang['event_title_tooltip'] = 'The title of the event';
|
||||
$hesklang['event_location'] = 'Location';
|
||||
$hesklang['event_location_tooltip'] = 'The location of the event';
|
||||
$hesklang['event_category_tooltip'] = 'Category for the event';
|
||||
$hesklang['event_start'] = 'Start';
|
||||
$hesklang['event_start_tooltip'] = 'The starting date (and time) of the event';
|
||||
$hesklang['event_start_date'] = 'Start Date';
|
||||
$hesklang['event_start_time'] = 'Start Time';
|
||||
$hesklang['event_all_day'] = 'All day';
|
||||
$hesklang['event_end'] = 'End';
|
||||
$hesklang['event_end_tooltip'] = 'The ending date (and time) of the event';
|
||||
$hesklang['event_end_date'] = 'End Date';
|
||||
$hesklang['event_end_time'] = 'End Time';
|
||||
$hesklang['event_reminder'] = 'Reminder';
|
||||
$hesklang['event_reminder_tooltip'] = 'Receive an e-mail reminder for this event. Only you will receive this reminder email.';
|
||||
$hesklang['event_min_before_event'] = 'minutes before event';
|
||||
$hesklang['event_hours_before_event'] = 'hours before event';
|
||||
$hesklang['event_days_before_event'] = 'days before event';
|
||||
$hesklang['event_weeks_before_event'] = 'weeks before event';
|
||||
$hesklang['event_comments'] = 'Comments';
|
||||
$hesklang['event_comments_tooltip'] = 'Additional comments about the event';
|
||||
$hesklang['event_create_ticket'] = 'Create Ticket';
|
||||
$hesklang['to_title_case'] = 'To';
|
||||
$hesklang['clear_for_no_due_date'] = 'Clear for no due date';
|
||||
$hesklang['ticket_due_date_updated'] = 'Ticket due date successfully updated';
|
||||
$hesklang['error_updating_ticket_due_date'] = 'An error occurred when trying to update the ticket due date';
|
||||
$hesklang['error_loading_events'] = 'An error occurred when trying to load events';
|
||||
$hesklang['error_deleting_event'] = 'An error occurred when trying to delete the event';
|
||||
$hesklang['event_deleted'] = 'Event successfully deleted';
|
||||
$hesklang['event_created'] = 'Event successfully created';
|
||||
$hesklang['error_creating_event'] = 'An error occurred when trying to create the event';
|
||||
$hesklang['event_updated'] = 'Event successfully updated';
|
||||
$hesklang['error_updating_event'] = 'An error occurred when trying to update the event';
|
||||
$hesklang['calendar_title_case'] = 'Calendar';
|
||||
$hesklang['calendar_categories'] = 'Categories';
|
||||
$hesklang['can_man_calendar'] = 'Can manage calendar events';
|
||||
$hesklang['calendar_reminder'] = 'Upcoming Event: %%TITLE%%';
|
||||
$hesklang['overdue_ticket'] = '[%%TRACKID%%] Ticket Overdue!';
|
||||
$hesklang['notify_overdue_unassigned'] = 'A ticket is overdue not assigned to me';
|
||||
$hesklang['calendar_settings'] = 'Calendar Settings';
|
||||
$hesklang['enable_calendar'] = 'Enable calendar';
|
||||
$hesklang['enable_calendar_help'] = 'Setting to enable / disable the calendar. The calendar can be shown to everyone, staff only, or disable the calendar entirely.';
|
||||
$hesklang['yes_enable_calendar'] = '<b>YES</b>, enable calendar';
|
||||
$hesklang['yes_enable_calendar_staff_only'] = '<b>YES</b>, enable calendar, but only for staff';
|
||||
$hesklang['no_disable_calendar'] = '<b>NO</b>, disable calendar';
|
||||
$hesklang['first_day_of_week'] = 'First day of week';
|
||||
$hesklang['first_day_of_week_help'] = 'This setting decides which day of the week to show first per week.';
|
||||
$hesklang['calendar_disabled'] = 'The calendar is disabled';
|
||||
$hesklang['default_view'] = 'Default Calendar View';
|
||||
$hesklang['default_view_help'] = 'Decide which view will be shown to customers and staff by default when viewing the calendar. Staff can change this setting via their own profile.';
|
||||
$hesklang['week'] = 'Week';
|
||||
$hesklang['calendar_day'] = 'Day';
|
||||
$hesklang['calendar_index'] = 'View upcoming events';
|
||||
$hesklang['usage'] = 'Usage';
|
||||
$hesklang['tickets_and_events'] = 'Tickets and events';
|
||||
$hesklang['tickets_only'] = 'Tickets only';
|
||||
$hesklang['events_only'] = 'Events only';
|
||||
$hesklang['events'] = 'Events';
|
||||
$hesklang['add_files'] = '<i class="fa fa-plus"></i> Add File';
|
||||
$hesklang['select_all_title_case'] = 'Select All';
|
||||
$hesklang['deselect_all_title_case'] = 'Deselect All';
|
||||
$hesklang['event'] = 'Event';
|
||||
$hesklang['overdue_ticket_legend'] = 'Overdue ticket';
|
||||
$hesklang['attachment_max_exceeded'] = 'This file will not be uploaded becuase you have already uploaded the maximum number of files allowed.';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 3.0.0
|
||||
$hesklang['you_have_x_messages'] = 'You have %s new %s'; // %s: Number of new messages, "message" or "messages", depending on #
|
||||
$hesklang['message_lower_case'] = 'message';
|
||||
$hesklang['messages_lower_case'] = 'messages';
|
||||
$hesklang['deleted_user_title_case'] = 'Deleted User';
|
||||
$hesklang['x_system_warnings'] = '%s System %s'; // %s: Number of warnings, $s: "Warning" or "Warnings", depending on #
|
||||
$hesklang['warnings_title_case'] = 'Warnings';
|
||||
$hesklang['articles_in_category_x'] = 'Articles in Category %s'; // %s: category name
|
||||
$hesklang['private_category_star'] = 'Private categories indicated by *';
|
||||
$hesklang['private_article_star'] = 'Private articles indicated by *';
|
||||
$hesklang['ticket_details'] = 'Ticket Details';
|
||||
$hesklang['more'] = 'More';
|
||||
$hesklang['click_to_edit'] = 'Click to edit';
|
||||
$hesklang['no_device_information'] = 'No device information';
|
||||
$hesklang['message_colon'] = 'Message:';
|
||||
$hesklang['original_message'] = 'Original message';
|
||||
$hesklang['reply_by_customer'] = 'Reply by customer';
|
||||
$hesklang['reply_by_staff'] = 'Reply by staff';
|
||||
$hesklang['timeline_today'] = 'Today';
|
||||
$hesklang['no_notes_for_this_ticket'] = 'No notes for this ticket';
|
||||
$hesklang['private_message_header'] = 'Private Message';
|
||||
$hesklang['date_colon'] = 'Date:';
|
||||
$hesklang['api_information'] = 'API Information';
|
||||
$hesklang['api_version'] = 'API Version';
|
||||
$hesklang['external_api'] = 'External API';
|
||||
$hesklang['external_api_help'] = 'Enable or Disable the external REST API';
|
||||
$hesklang['disabled_title_case'] = 'Disabled';
|
||||
$hesklang['enabled_title_case'] = 'Enabled';
|
||||
$hesklang['api_settings'] = 'API Settings';
|
||||
$hesklang['user_security'] = 'User Security';
|
||||
$hesklang['api_documentation'] = 'API Documentation';
|
||||
$hesklang['changes_saved'] = 'Changes saved!';
|
||||
$hesklang['save_failed_check_logs'] = 'Saving changes failed. Check the logs for more information.';
|
||||
$hesklang['number_of_tokens'] = 'Number of Tokens';
|
||||
$hesklang['generate_new_token'] = 'Generate New Token';
|
||||
$hesklang['revoke_all_tokens'] = 'Revoke All Tokens';
|
||||
$hesklang['generated_token_colon'] = 'Generated Token:';
|
||||
$hesklang['record_this_token_warning'] = 'Please record this token, as this is the only time you will be able to view it!';
|
||||
$hesklang['all_tokens_revoked'] = 'All tokens for this user have been revoked';
|
||||
$hesklang['staff_login_title'] = 'Staff Login';
|
||||
$hesklang['manage_custom_fields'] = 'Manage Custom Fields';
|
||||
$hesklang['value'] = 'Value';
|
||||
$hesklang['readonly'] = 'Readonly';
|
||||
$hesklang['copy_ticket'] = 'Copy Ticket';
|
||||
$hesklang['canned_responses_dropdown_title'] = 'Canned Responses';
|
||||
$hesklang['helpdesk_settings'] = 'Helpdesk Settings';
|
||||
$hesklang['click_to_toggle'] = 'Click to toggle';
|
||||
$hesklang['see_all_messages'] = 'See All Messages';
|
||||
|
||||
// ADDED OR MODIFIED IN Mods for HESK 3.1.0
|
||||
$hesklang['stack_trace_header'] = 'Stack Trace';
|
||||
$hesklang['ticket_message_contents_exist'] = 'The ticket message is not empty. Are you sure you want to leave this page?';
|
||||
$hesklang['resend_email_notification'] = 'Re-send Email Notification';
|
||||
$hesklang['email_notification_sent'] = 'Email notification sent!';
|
||||
$hesklang['email_notification_resend_failed'] = 'Error occurred when trying to send notification email.';
|
||||
$hesklang['edit_category'] = 'Edit Category';
|
||||
$hesklang['custom_nav_menu_elements'] = 'Custom Nav Menu Elements';
|
||||
$hesklang['create_new'] = 'Create New';
|
||||
$hesklang['custom_nav_element_deleted'] = 'Custom Navigation Element Deleted!';
|
||||
$hesklang['no_custom_nav_elements_found'] = 'No custom nav menu elements found';
|
||||
$hesklang['alert_success'] = 'Success'; // Used for alert messages
|
||||
$hesklang['alert_error'] = 'Error'; // Used for alert messages
|
||||
$hesklang['failed_to_load_custom_nav_elements'] = 'Failed to load custom nav elements!';
|
||||
$hesklang['custom_nav_element_deleted'] = 'Custom nav element deleted!';
|
||||
$hesklang['error_deleting_custom_nav_element'] = 'Error deleting custom nav element!';
|
||||
$hesklang['error_sorting_custom_nav_elements'] = 'Error sorting custom nav elements!';
|
||||
$hesklang['custom_nav_element_created'] = 'Custom nav element created!';
|
||||
$hesklang['custom_nav_element_saved'] = 'Custom nav element saved!';
|
||||
$hesklang['homepage_block'] = 'Homepage - Block';
|
||||
$hesklang['customer_navigation'] = 'Customer Navigation';
|
||||
$hesklang['staff_navigation'] = 'Staff Navigation';
|
||||
$hesklang['custom_nav_text'] = 'Text';
|
||||
$hesklang['custom_nav_subtext'] = 'Subtext';
|
||||
$hesklang['image_url_slash_font_icon'] = 'Image URL / Font Icon';
|
||||
$hesklang['edit_custom_nav_element_title_case'] = 'Edit Custom Nav Element';
|
||||
$hesklang['create_custom_nav_element_title_case'] = 'Create Custom Nav Element';
|
||||
$hesklang['place'] = 'Place';
|
||||
$hesklang['image_type'] = 'Image Type';
|
||||
$hesklang['image_url'] = 'Image URL';
|
||||
$hesklang['image_url_help'] = 'The URL of the image you wish to use. For customer/staff navigation, recommended size is <b>16x16px</b>. For the homepage blocks, recommended size is <b>32x32px</b>.';
|
||||
$hesklang['font_icon'] = 'Font Icon';
|
||||
$hesklang['error_saving_custom_nav_element'] = 'Error saving custom nav element!';
|
||||
$hesklang['place_help'] = 'The location of the custom navigation element.';
|
||||
$hesklang['url_help'] = 'The URL where the user should be taken to. Both relative and absolute URLs are supported.';
|
||||
$hesklang['common_properties'] = 'Common Properties';
|
||||
$hesklang['customer_view'] = 'Customer View';
|
||||
$hesklang['admin_panel'] = 'Admin Panel';
|
||||
$hesklang['manage_custom_nav_elements'] = 'Manage Custom Nav Elements';
|
||||
$hesklang['can_man_custom_nav'] = 'Can manage custom nav elements';
|
||||
$hesklang['category_background_color'] = 'Background Color';
|
||||
$hesklang['category_foreground_color'] = 'Foreground Color';
|
||||
$hesklang['category_background_color_help'] = 'The hex code for the background color to be used on the view ticket screen and calendar.';
|
||||
$hesklang['category_foreground_color_help'] = 'The hex code for the foreground color to be used on the view ticket and calendar screens. Leave blank for automatic color based on background.';
|
||||
$hesklang['category_display_border'] = 'Display Border';
|
||||
$hesklang['category_display_border_help'] = 'Choose to decide whether or not to display a border around the category (uses foreground color). <b>
|
||||
This is ignored if foreground color is set to automatic.</b>';
|
||||
$hesklang['login_page'] = 'Login Page'; // Header on admin settings page
|
||||
$hesklang['login_background'] = 'Login Background';
|
||||
$hesklang['solid_color'] = 'Solid color';
|
||||
$hesklang['login_background_color'] = 'Login Background Color'; // Input field information for screen-readers. Does not appear on-screen
|
||||
$hesklang['login_background_image'] = 'Login Background Image'; // Input field information for screen-readers. Does not appear on-screen
|
||||
$hesklang['login_box_header'] = 'Login Box Header';
|
||||
$hesklang['login_header_image'] = 'Login Header Image'; // Input field information for screen-readers. Does not appear on-screen
|
||||
$hesklang['background_color'] = 'Background Color';
|
||||
$hesklang['background_color_help'] = 'The background color.';
|
||||
$hesklang['text_color'] = 'Text Color';
|
||||
$hesklang['text_color_help'] = 'The text color';
|
||||
$hesklang['text_hover_color'] = 'Hover Color: Text';
|
||||
$hesklang['text_hover_color_help'] = 'The text color when hovering over a link';
|
||||
$hesklang['background_hover_color'] = 'Hover Color: Background';
|
||||
$hesklang['background_hover_color_help'] = 'The background color when hovering over a link';
|
||||
$hesklang['navbar'] = 'Navigation Bar';
|
||||
$hesklang['navbar_brand'] = 'Navigation Brand';
|
||||
$hesklang['sidebar'] = 'Sidebar';
|
||||
$hesklang['sidebar_header'] = 'Sidebar Header';
|
||||
$hesklang['font_weight'] = 'Font Weight';
|
||||
$hesklang['font_weight_help'] = 'The font weight for text';
|
||||
$hesklang['normal'] = 'Normal';
|
||||
$hesklang['bold'] = 'Bold';
|
||||
$hesklang['color_preset'] = 'Color Preset';
|
||||
$hesklang['color_preset_help'] = 'Select a color preset for the backend, or define custom colors below.';
|
||||
$hesklang['select_a_preset'] = '-- Select a Preset --';
|
||||
$hesklang['preset_blue'] = 'Blue';
|
||||
$hesklang['preset_blue_light'] = 'Blue (light)';
|
||||
$hesklang['preset_yellow'] = 'Yellow';
|
||||
$hesklang['preset_yellow_light'] = 'Yellow (light)';
|
||||
$hesklang['preset_green'] = 'Green';
|
||||
$hesklang['preset_green_light'] = 'Green (light)';
|
||||
$hesklang['preset_purple'] = 'Purple';
|
||||
$hesklang['preset_purple_light'] = 'Purple (light)';
|
||||
$hesklang['preset_red'] = 'Red';
|
||||
$hesklang['preset_red_light'] = 'Red (light)';
|
||||
$hesklang['preset_black'] = 'Black';
|
||||
$hesklang['preset_black_light'] = 'Black (light)';
|
||||
$hesklang['url_rewrite'] = 'URL Rewrite';
|
||||
$hesklang['url_rewrite_help'] = 'Remove the need to include /index.php in API URLs (i.e. /api/index.php/v1/... -> /api/v1/...). Rename htaccess.txt to .htaccess in the /api folder to use.';
|
||||
$hesklang['url_rewrite_saved'] = 'URL rewrite setting saved!';
|
||||
$hesklang['api_settings_saved'] = 'API settings saved!';
|
||||
$hesklang['an_error_occurred'] = 'An error occurred. Check the logs for more information';
|
||||
|
||||
// Added or modified in Mods for HESK 3.2.0
|
||||
$hesklang['error_deleting_category'] = 'An error occurred when trying to delete the category.';
|
||||
$hesklang['cat_private'] = 'Private';
|
||||
$hesklang['cat_public'] = 'Public';
|
||||
$hesklang['cat_name_description'] = 'Name / Description';
|
||||
$hesklang['error_sorting_categories'] = 'An error occurred sorting categories!';
|
||||
$hesklang['error_retrieving_categories'] = 'An error occurred retrieving categories!';
|
||||
$hesklang['error_saving_updating_category'] = 'An error occurred creating / saving the category!';
|
||||
$hesklang['description_colon'] = 'Description:'; // Same as 'description', but with a colon (:) afterwards
|
||||
$hesklang['copied_to_clipboard'] = 'Copied to clipboard';
|
||||
|
||||
// Language for the calendar pages
|
||||
// Supported language codes: https://github.com/fullcalendar/fullcalendar/tree/v3.0.1/locale (do not include .js!)
|
||||
// If your language is NOT in the supported langauges, leave 'en'
|
||||
$hesklang['CALENDAR_LANGUAGE']='en';
|
||||
|
||||
|
||||
$hesklang['manage_permission_groups'] = 'Manage Permission Groups';
|
||||
$hesklang['manage_permission_groups_help'] = 'Here you can create and edit permission groups. These groups will appear when creating/editing a user.
|
||||
When editing a permission group, all users assigned to this group will also have their permissions updated accordingly.';
|
||||
$hesklang['view_permissions_for_this_group'] = 'View/edit permissions for this group';
|
||||
$hesklang['permission'] = 'Permission';
|
||||
$hesklang['permissions_for_group'] = 'Permissions for group <code>%s</code>'; // %s template name
|
||||
$hesklang['permission_group_updated'] = 'Permission group has been updated!';
|
||||
$hesklang['create_new_group'] = 'Create new permission group';
|
||||
$hesklang['create_new_group_title'] = 'Create New Permission Group'; // same as create_new_template, but in Title Case
|
||||
$hesklang['group_name'] = 'Group name';
|
||||
$hesklang['group_name_required'] = 'Group name required.';
|
||||
$hesklang['permission_group_error'] = 'The permission group could not be saved due to the following error(s): %s'; // %s: error list
|
||||
$hesklang['group_created'] = 'Permission group successfully created!';
|
||||
$hesklang['cannot_delete_admin_or_staff'] = 'The <b>Administrator</b> and <b>Staff</b> permission groups cannot be deleted!';
|
||||
$hesklang['no_groups_were_deleted'] = 'No groups were deleted!';
|
||||
$hesklang['permission_group_deleted'] = 'Permission group deleted!';
|
||||
$hesklang['manange_permission_groups_menu'] = 'Permission groups'; // Menu link
|
||||
$hesklang['permission_groups'] = 'Permission Groups';
|
||||
$hesklang['can_man_permission_tpl'] = 'Can manage permission groups';
|
||||
$hesklang['permission_group_colon'] = 'Permission Group:';
|
||||
$hesklang['permission_group'] = 'Permission Group';
|
||||
$hesklang['changing_permissions_will_reset_permission_group'] = 'Changing a user\'s categories / features will reset their permission group! Click "Discard Changes" to reset the user\'s categories / features.';
|
||||
|
||||
// --> Ticket audit trail
|
||||
$hesklang['audit_moved_category']='%s moved ticket to category %s'; // %s = new category, user making change, thist1
|
||||
$hesklang['audit_assigned']='%s assigned ticket to %s'; // %s = assigned user, user making change
|
||||
$hesklang['audit_assigned_self'] = '%s self-assigned ticket';
|
||||
$hesklang['audit_unassigned'] = '%s unassigned ticket';
|
||||
$hesklang['audit_closed']='%s closed ticket'; // thist3
|
||||
$hesklang['audit_automatically_closed'] ='Ticket automatically closed';
|
||||
$hesklang['audit_opened']='%s opened ticket'; // thist4
|
||||
$hesklang['audit_locked']='%s locked ticket'; // thist5
|
||||
$hesklang['audit_automatically_locked'] = 'Ticket automatically locked';
|
||||
$hesklang['audit_unlocked']='%s unlocked ticket'; // thist6
|
||||
$hesklang['audit_created']='%s created ticket';
|
||||
$hesklang['audit_priority']='%s changed priority to %s'; // %s = date,new priority, user making change, thist8
|
||||
$hesklang['audit_status']='%s changed status to %s'; // %s = date, new status, user making change, thist9
|
||||
$hesklang['audit_autoassigned']='%s automatically assigned to ticket'; //thist10
|
||||
$hesklang['audit_submitted_via_piping']='Ticket submitted via e-mail piping'; // thist11
|
||||
$hesklang['audit_attachment_deleted']='%s deleted attachment %s'; // %s = date, deleted attachment, user making change
|
||||
$hesklang['audit_merged']='%s merged ticket %s with this ticket'; // %s = date, merged ticket ID, user making change, thist13
|
||||
$hesklang['audit_time_worked']='%s updated time worked to %s'; // %s = date, new time worked, user making change
|
||||
$hesklang['audit_submitted_by']='%s submitted ticket';
|
||||
$hesklang['audit_submitted_via_pop']='Ticket submitted via POP3 fetching'; // thist16
|
||||
$hesklang['audit_due_date_removed'] = '%s removed due date';
|
||||
$hesklang['audit_due_date_changed'] = '%s changed due date to %s';
|
||||
$hesklang['audit_linked_ticket'] = '%s linked ticket %s to this ticket';
|
||||
$hesklang['audit_unlinked_ticket'] = '%s unlinked ticket %s';
|
||||
|
||||
// Added or modified in Mods for HESK 3.3.0
|
||||
$hesklang['audit_event_created'] = '%s created event';
|
||||
$hesklang['audit_event_updated'] = '%s updated event';
|
||||
$hesklang['error_retrieving_sm'] = 'An error occurred retrieving service messages!';
|
||||
$hesklang['error_saving_updating_sm'] = 'An error occurred creating / saving the service message!';
|
||||
$hesklang['error_deleting_sm'] = 'An error occurred when trying to delete the service message.';
|
||||
$hesklang['error_sorting_sm'] = 'An error occurred sorting service messages!';
|
||||
$hesklang['sm_location'] = 'Location'; // Location for service messages
|
||||
$hesklang['sm_customer_pages'] = 'Customer Pages';
|
||||
$hesklang['sm_staff_pages'] = 'Staff Pages';
|
||||
$hesklang['sm_homepage'] = 'Homepage';
|
||||
$hesklang['sm_kb_home'] = 'Knowledgebase Home';
|
||||
$hesklang['sm_view_kb_article'] = 'View Knowledgebase Article';
|
||||
$hesklang['sm_submit_ticket'] = 'Submit Ticket';
|
||||
$hesklang['sm_view_ticket'] = 'View Ticket';
|
||||
$hesklang['sm_login_page'] = 'Login Page';
|
||||
$hesklang['business_hours'] = 'Business Hours';
|
||||
$hesklang['business_hours_help'] = 'Set business hours for the calendar. There is no functional change by setting this,
|
||||
but times outside of the defined business hours will have a darker gray background for increased visibility.';
|
||||
$hesklang['show_event_start_time'] = 'Show event start time in title';
|
||||
$hesklang['show_event_start_time_help'] = 'Always show the start time on event titles (unless the event is an all-day event).';
|
||||
$hesklang['highlight_ticket_rows_based_on_priority'] = 'Highlight ticket rows based on priority';
|
||||
$hesklang['highlight_ticket_rows_based_on_priority_help'] = 'If enabled, each ticket on the tickets page will be highlighted based on priority. If disabled, only * Critical * and High priority tickets will be highlighted.';
|
||||
$hesklang['highlight_ticket_rows_based_on_priority_descr'] = 'Highlight all ticket rows based on priority';
|
||||
$hesklang['protected_group'] = 'This is a protected group; you cannot change accessible categories / features.';
|
||||
$hesklang['emails_to_receive'] = 'Emails to receive';
|
||||
$hesklang['emails_sent_to_staff'] = 'Emails sent to staff';
|
||||
$hesklang['emails_sent_to_customer'] = 'Emails sent to customer';
|
||||
|
||||
// Added or modified in Mods for HESK 4.0.0
|
||||
$hesklang['audit_anonymized'] = '%s anonymized ticket';
|
||||
$hesklang['location_unavailable_6'] = "This ticket was anonymized, so location information has been removed.";
|
||||
$hesklang['anon_user_agent'] = '[User Agent]';
|
||||
$hesklang['anon_screen_resolution'] = '0';
|
||||
$hesklang['audit_submitted_via_imap']='Ticket submitted via IMAP fetching';
|
||||
$hesklang['thist'] = 'Audit Log'; // Overriding text.php's value
|
||||
|
||||
// DO NOT CHANGE BELOW
|
||||
if (!defined('IN_SCRIPT')) die('PHP syntax OK!');
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue