parent
cc1d6dee77
commit
afa279d98d
@ -258,7 +258,7 @@ elseif (isset($_POST['submit_as_status']))
|
||||
if ($ticket['status'] != $new_status)
|
||||
{
|
||||
// Does this status close the ticket?
|
||||
$newStatusRs = hesk_dbQuery('SELECT `IsClosed`, `ShortNameContentKey` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `ID` = '.hesk_dbEscape($new_status));
|
||||
$newStatusRs = hesk_dbQuery('SELECT `IsClosed`, `Key` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `ID` = '.hesk_dbEscape($new_status));
|
||||
$newStatus = hesk_dbFetchAssoc($newStatusRs);
|
||||
|
||||
if ($newStatus['IsClosed'])
|
||||
@ -274,7 +274,7 @@ elseif (isset($_POST['submit_as_status']))
|
||||
} else
|
||||
{
|
||||
// Ticket isn't being closed, just add the history to the sql query
|
||||
$revision = sprintf($hesklang['thist9'],hesk_date(),$hesklang[$newStatus['ShortNameContentKey']],$_SESSION['name'].' ('.$_SESSION['user'].')');
|
||||
$revision = sprintf($hesklang['thist9'],hesk_date(),$hesklang[$newStatus['Key']],$_SESSION['name'].' ('.$_SESSION['user'].')');
|
||||
$sql_status = " , `history`=CONCAT(`history`,'".hesk_dbEscape($revision)."') ";
|
||||
}
|
||||
}
|
||||
|
||||
@ -517,7 +517,6 @@ if ( defined('HESK_DEMO') )
|
||||
<?php echo $hesklang['mods_for_hesk']; ?><span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="modsForHeskDropdown">
|
||||
<li><a href="#statuses" data-toggle="tab"><?php echo $hesklang['statuses']; ?></a></li>
|
||||
<li><a href="#colors" data-toggle="tab"><?php echo $hesklang['uiColors']; ?></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -2212,221 +2211,6 @@ if ( defined('HESK_DEMO') )
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Mods For Hesk: Statuses -->
|
||||
<div class="tab-pane fade in" id="statuses">
|
||||
<h6 style="font-weight: bold"><?php echo $hesklang['basicProperties']; ?></h6>
|
||||
<div class="footerWithBorder blankSpace"></div>
|
||||
<?php
|
||||
//-- We need to get all of the statuses and dump the information to the page.
|
||||
$statusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$closedStatusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 1';
|
||||
$openStatusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 0';
|
||||
$statusesRS = hesk_dbQuery($statusesSql);
|
||||
//Print header
|
||||
?>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo $hesklang['name']; ?></th>
|
||||
<th><?php echo $hesklang['shortNameKey']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['shortNameKey']; ?>" data-content="<?php echo $hesklang['shortNameKeyDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['longNameKey']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['longNameKey']; ?>" data-content="<?php echo $hesklang['longNameKeyDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['textColor']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['textColor']; ?>" data-content="<?php echo $hesklang['textColorDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['closable_question']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="htmlpopover" data-placement="bottom" title="<?php echo $hesklang['closable_question']; ?>" data-content="<?php echo $hesklang['closable_description']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['closedQuestionMark']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" data-placement="top" title="<?php echo $hesklang['closedQuestionMark']; ?>" data-content="<?php echo $hesklang['closedQuestionMarkDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['delete']; ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
//Print each status
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$checkedEcho = ($row['IsClosed'] == 1) ? 'checked="checked"' : '';
|
||||
$isDisabled = false;
|
||||
if ($row['IsNewTicketStatus'] || $row['IsClosedByClient'] || $row['IsCustomerReplyStatus'] ||
|
||||
$row['IsStaffClosedOption'] || $row['IsStaffReopenedStatus'] || $row['IsDefaultStaffReplyStatus'] ||
|
||||
$row['LockedTicketStatus'] || $row['IsAutocloseOption'])
|
||||
{
|
||||
$isDisabled = true;
|
||||
}
|
||||
|
||||
$yesSelected = $customersOnlySelected = $staffOnlySelected = $noSelected = '';
|
||||
if ($row['Closable'] == 'yes') { $yesSelected = 'selected'; }
|
||||
elseif ($row['Closable'] == 'conly') { $customersOnlySelected = 'selected'; }
|
||||
elseif ($row['Closable'] == 'sonly') { $staffOnlySelected = 'selected'; }
|
||||
else { $noSelected = 'selected'; }
|
||||
|
||||
echo '<tr id="s'.$row['ID'].'_row">';
|
||||
echo '<td>'.$hesklang[$row['ShortNameContentKey']].'</td>'; //Name
|
||||
echo '<td><input type="text" class="form-control" name="s'.$row['ID'].'_shortName" value="'.$row['ShortNameContentKey'].'" placeholder="'.htmlspecialchars($hesklang['shortNameKey']).'"></td>'; // Short Name Language File
|
||||
echo '<td><input type="text" class="form-control" name="s'.$row['ID'].'_longName" value="'.$row['TicketViewContentKey'].'" placeholder="'.htmlspecialchars($hesklang['longNameKey']).'"></td>'; // Long Name Language File
|
||||
echo '<td><input type="text" class="form-control" name="s'.$row['ID'].'_textColor" value="'.$row['TextColor'].'" placeholder="'.htmlspecialchars($hesklang['textColor']).'"></td>'; // Text Color
|
||||
echo '<td>
|
||||
<select class="form-control" name="s'.$row['ID'].'_closable">
|
||||
<option value="yes" '.$yesSelected.'>'.$hesklang['yes_title_case'].'</option>
|
||||
<option value="conly" '.$customersOnlySelected.'>'.$hesklang['customers_only'].'</option>
|
||||
<option value="sonly" '.$staffOnlySelected.'>'.$hesklang['staff_only'].'</option>
|
||||
<option value="no" '.$noSelected.'>'.$hesklang['no_title_case'].'</option>
|
||||
</select>
|
||||
</td>';
|
||||
echo '<td><input type="checkbox" name="s'.$row['ID'].'_isClosed" value="1" '.$checkedEcho.'></td>'; // Resolved Status?
|
||||
echo '<td>';
|
||||
if ($isDisabled)
|
||||
{
|
||||
echo '<i class="fa fa-ban" style="color: red; font-size: 1.2em; font-weight: bold" data-toggle="popover" data-placement="left" title="'.$hesklang['whyCantIDeleteThisStatus'].'" data-content="'.$hesklang['whyCantIDeleteThisStatusReason'].'"></i>';
|
||||
} else
|
||||
{
|
||||
echo '<input type="checkbox" onclick="toggleRow(\'s'.$row['ID'].'_row\')" name="s'.$row['ID'].'_delete" value="1">';
|
||||
}
|
||||
echo '</td>'; //Delete status?
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
//Print out an additional blank space for adding a status
|
||||
echo '<tr class="info">';
|
||||
echo '<td><b>'.$hesklang['addNew'].'</b></td>';
|
||||
echo '<td><input type="text" class="form-control" name="sN_shortName" value="" placeholder="'.htmlspecialchars($hesklang['shortNameKey']).'"></td>'; // Short Name Language File
|
||||
echo '<td><input type="text" class="form-control" name="sN_longName" value="" placeholder="'.htmlspecialchars($hesklang['longNameKey']).'"></td>'; // Long Name Language File
|
||||
echo '<td><input type="text" class="form-control" name="sN_textColor" value="" placeholder="'.htmlspecialchars($hesklang['textColor']).'"></td>'; // Text Color
|
||||
echo '<td>
|
||||
<select class="form-control" name="sN_closable">
|
||||
<option value="yes">'.$hesklang['yes_title_case'].'</option>
|
||||
<option value="conly">'.$hesklang['customers_only'].'</option>
|
||||
<option value="sonly">'.$hesklang['staff_only'].'</option>
|
||||
<option value="no">'.$hesklang['no_title_case'].'</option>
|
||||
</select>
|
||||
</td>';
|
||||
echo '<td><input type="checkbox" name="sN_isClosed" value="1"></td>'; // Resolved Status?
|
||||
echo '<td></td>'; //Empty placeholder where the delete row is.
|
||||
echo '</tr>';
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h6 style="font-weight: bold"><?php echo $hesklang['defaultStatusForAction']; ?></h6>
|
||||
<div class="footerWithBorder blankSpace"></div>
|
||||
<div class="form-group">
|
||||
<label for="newTicket" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isNewTicketMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="newTicket" class="form-control" id="newTicket">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsNewTicketStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="closedByClient" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isClosedByClientMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="closedByClient" class="form-control" id="closedByClient">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsClosedByClient'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="replyFromClient" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isRepliedByClientMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="replyFromClient" class="form-control" id="replyFromClient">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsCustomerReplyStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="staffClosedOption" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isStaffClosedOptionMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="staffClosedOption" class="form-control" id="staffClosedOption">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsStaffClosedOption'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="staffReopenedStatus" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isStaffReopenedStatusMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="staffReopenedStatus" class="form-control" id="staffReopenedStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsStaffReopenedStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="defaultStaffReplyStatus" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['isDefaultStaffReplyStatusMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="defaultStaffReplyStatus" class="form-control" id="defaultStaffReplyStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsDefaultStaffReplyStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lockedTicketStatus" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['lockedTicketStatusMsg']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="lockedTicketStatus" class="form-control" id="lockedTicketStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($statusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['LockedTicketStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="autocloseTicketOption" class="col-sm-8 col-xs-12 control-label"><?php echo $hesklang['autoclose_ticket_status']; ?></label>
|
||||
<div class="col-sm-4 col-xs-12">
|
||||
<select name="autocloseTicketOption" class="form-control" id="autocloseTicketOption">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsAutocloseOption'] == 1) ? 'selected' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Mods For Hesk: Color settings -->
|
||||
<div class="tab-pane fade in" id="colors">
|
||||
<h6 style="font-weight: bold"><?php echo $hesklang['uiColors']; ?></h6>
|
||||
|
||||
@ -510,106 +510,6 @@ for ($i=1;$i<=20;$i++)
|
||||
}
|
||||
}
|
||||
|
||||
//-- Update the statuses
|
||||
hesk_dbConnect();
|
||||
$wasStatusDeleted = false;
|
||||
//-- Get all the status IDs
|
||||
$statusesSql = 'SELECT * FROM `'.$hesk_settings['db_pfix'].'statuses`';
|
||||
$results = hesk_dbQuery($statusesSql);
|
||||
while ($row = $results->fetch_assoc())
|
||||
{
|
||||
//-- If the status is marked for deletion, delete it and skip everything below.
|
||||
if (isset($_POST['s'.$row['ID'].'_delete']))
|
||||
{
|
||||
$delete = "DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($delete);
|
||||
$stmt->bind_param('i', $row['ID']);
|
||||
$stmt->execute();
|
||||
$wasStatusDeleted = true;
|
||||
} else
|
||||
{
|
||||
//-- Update the information in the database with what is on the page
|
||||
$query = "UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET `ShortNameContentKey` = ?, `TicketViewContentKey` = ?, `TextColor` = ?, `IsClosed` = ?, `Closable` = ? WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($query);
|
||||
$isStatusClosed = (isset($_POST['s'.$row['ID'].'_isClosed']) ? 1 : 0);
|
||||
$stmt->bind_param('sssisi', $_POST['s'.$row['ID'].'_shortName'], $_POST['s'.$row['ID'].'_longName'], $_POST['s'.$row['ID'].'_textColor'], $isStatusClosed, $_POST['s'.$row['ID'].'_closable'], $row['ID']);
|
||||
$stmt->execute();
|
||||
}
|
||||
}
|
||||
|
||||
//-- If any statuses were deleted, re-index them before adding a new one
|
||||
if ($wasStatusDeleted) {
|
||||
//-- First drop and re-add the ID column
|
||||
hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` DROP COLUMN `ID`");
|
||||
hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` ADD `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
|
||||
|
||||
//-- Since statuses should be zero-based, but are now one-based, subtract one from each ID
|
||||
hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET `ID` = `ID`-1");
|
||||
}
|
||||
|
||||
//-- Insert the addition if there is anything to add
|
||||
if ($_POST['sN_shortName'] != null && $_POST['sN_longName'] != null && $_POST['sN_textColor'] != null)
|
||||
{
|
||||
//-- The next ID is equal to the number of rows, since the IDs are zero-indexed.
|
||||
$nextValue = hesk_dbQuery('SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`')->num_rows;
|
||||
$isClosed = isset($_POST['sN_isClosed']) ? 1 : 0;
|
||||
$insert = "INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` (`ID`, `ShortNameContentKey`, `TicketViewContentKey`, `TextColor`, `IsClosed`, `Closable`)
|
||||
VALUES (".$nextValue.", '".hesk_dbEscape($_POST['sN_shortName'])."', '".hesk_dbEscape($_POST['sN_longName'])."', '".hesk_dbEscape($_POST['sN_textColor'])."', ".$isClosed.", '".hesk_dbEscape($_POST['sN_closable'])."')";
|
||||
hesk_dbQuery($insert);
|
||||
}
|
||||
|
||||
//-- Update default status for actions
|
||||
$defaultQuery = "UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET ";
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsNewTicketStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsNewTicketStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['newTicket']);
|
||||
$stmt->execute();
|
||||
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsClosedByClient` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsClosedByClient` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['closedByClient']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsCustomerReplyStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsCustomerReplyStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['replyFromClient']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsStaffClosedOption` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsStaffClosedOption` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['staffClosedOption']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsStaffReopenedStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsStaffReopenedStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['staffReopenedStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsDefaultStaffReplyStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsDefaultStaffReplyStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['defaultStaffReplyStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`LockedTicketStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`LockedTicketStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['lockedTicketStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsAutocloseOption` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsAutocloseOption` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['autocloseTicketOption']);
|
||||
$stmt->execute();
|
||||
|
||||
$set['hesk_version'] = $hesk_settings['hesk_version'];
|
||||
|
||||
// Save the modsForHesk_settings.inc.php file
|
||||
|
||||
@ -663,7 +663,7 @@ if($ticket['email'] != '') {
|
||||
$newRecentTicket = $recentTicket;
|
||||
$thisTicketStatusRS = hesk_dbQuery("SELECT * FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "statuses` WHERE `ID` = " . intval($recentTicket['status']));
|
||||
$theStatusRow = hesk_dbFetchAssoc($thisTicketStatusRS);
|
||||
$newRecentTicket['statusText'] = $hesklang[$theStatusRow['ShortNameContentKey']];
|
||||
$newRecentTicket['statusText'] = $hesklang[$theStatusRow['Key']];
|
||||
$newRecentTicket['statusColor'] = $theStatusRow['TextColor'];
|
||||
array_push($recentTicketsWithStatuses, $newRecentTicket);
|
||||
}
|
||||
@ -876,7 +876,7 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
|
||||
<?php
|
||||
$random=rand(10000,99999);
|
||||
|
||||
$statusSql = 'SELECT `ID`, `ShortNameContentKey`, `IsStaffClosedOption`, `IsStaffReopenedStatus` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsStaffClosedOption` = 1 OR `IsStaffReopenedStatus` = 1';
|
||||
$statusSql = 'SELECT `ID`, `Key`, `IsStaffClosedOption`, `IsStaffReopenedStatus` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsStaffClosedOption` = 1 OR `IsStaffReopenedStatus` = 1';
|
||||
$statusRs = hesk_dbQuery($statusSql);
|
||||
$staffClosedOptionStatus = array();
|
||||
$staffReopenedStatus = array();
|
||||
@ -976,11 +976,11 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
|
||||
|
||||
echo '<div class="col-md-3 col-sm-12 ticket-cell-admin"><p class="ticketPropertyTitle">'.$hesklang['status'].'</p>';
|
||||
$status_options = array();
|
||||
$results = hesk_dbQuery("SELECT `ID`, `ShortNameContentKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`");
|
||||
$results = hesk_dbQuery("SELECT `ID`, `Key` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`");
|
||||
while ($row = $results->fetch_assoc())
|
||||
{
|
||||
$selected = $ticket['status'] == $row['ID'] ? 'selected' : '';
|
||||
$status_options[$row['ID']] = '<option value="'.$row['ID'].'" '.$selected.'>'.$hesklang[$row['ShortNameContentKey']].'</option>';
|
||||
$status_options[$row['ID']] = '<option value="'.$row['ID'].'" '.$selected.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
|
||||
echo '
|
||||
@ -1969,7 +1969,7 @@ function hesk_printReplyForm() {
|
||||
</a></li>
|
||||
<li class="divider"></li>
|
||||
<?php
|
||||
$allStatusesRs = hesk_dbQuery('SELECT `ID`, `ShortNameContentKey`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`');
|
||||
$allStatusesRs = hesk_dbQuery('SELECT `ID`, `Key`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`');
|
||||
$statuses = array();
|
||||
while ($row = hesk_dbFetchAssoc($allStatusesRs)) {
|
||||
array_push($statuses, $row);
|
||||
@ -1979,7 +1979,7 @@ function hesk_printReplyForm() {
|
||||
echo '<li><a>
|
||||
<button class="dropdown-submit" type="submit" name="submit_as_status" value="'.$status['ID'].'"">
|
||||
'.$hesklang['submit_reply'].' '.$hesklang['and_change_status_to'].' <b>
|
||||
<span style="color:'.$status['TextColor'].'">'.$hesklang[$status['ShortNameContentKey']].'</span></b>
|
||||
<span style="color:'.$status['TextColor'].'">'.$hesklang[$status['Key']].'</span></b>
|
||||
</button>
|
||||
</a></li>';
|
||||
}
|
||||
|
||||
@ -56,13 +56,13 @@ hesk_token_check();
|
||||
$trackingID = hesk_cleanID() or die($hesklang['int_error'].': '.$hesklang['no_trackID']);
|
||||
|
||||
/* Valid statuses */
|
||||
$statusSql = "SELECT `ID`, `ShortNameContentKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`";
|
||||
$statusSql = "SELECT `ID`, `Key` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`";
|
||||
$status_options = array();
|
||||
$results = hesk_dbQuery($statusSql);
|
||||
|
||||
while ($row = $results->fetch_assoc())
|
||||
{
|
||||
$status_options[$row['ID']] = $hesklang[$row['ShortNameContentKey']];
|
||||
$status_options[$row['ID']] = $hesklang[$row['Key']];
|
||||
}
|
||||
|
||||
/* New status */
|
||||
|
||||
@ -242,12 +242,12 @@ $fid = 1;
|
||||
require(HESK_PATH . 'inc/assignment_search.inc.php');
|
||||
|
||||
// --> TICKET STATUS
|
||||
$possibleStatusSql = 'SELECT `ID`, `ShortNameContentKey` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$possibleStatusSql = 'SELECT `ID`, `Key` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$possibleStatusRS = hesk_dbQuery($possibleStatusSql);
|
||||
$possible_status = array();
|
||||
while ($row = $possibleStatusRS->fetch_assoc())
|
||||
{
|
||||
$possible_status[$row['ID']] = $hesklang[$row['ShortNameContentKey']];
|
||||
$possible_status[$row['ID']] = $hesklang[$row['Key']];
|
||||
}
|
||||
|
||||
$status = $possible_status;
|
||||
@ -505,9 +505,9 @@ if (isset($_GET['w']))
|
||||
$result = hesk_dbQuery($sql);
|
||||
while ($ticket=hesk_dbFetchAssoc($result))
|
||||
{
|
||||
$statusContentKeySql = 'SELECT `ShortNameContentKey` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `ID` = '.$ticket['status'];
|
||||
$statusContentKeySql = 'SELECT `Key` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `ID` = '.$ticket['status'];
|
||||
$statusContentKeyRow = hesk_dbQuery($statusContentKeySql)->fetch_assoc();
|
||||
$ticket['status'] = $hesklang[$statusContentKeyRow['ShortNameContentKey']];
|
||||
$ticket['status'] = $hesklang[$statusContentKeyRow['Key']];
|
||||
|
||||
switch ($ticket['priority'])
|
||||
{
|
||||
@ -779,14 +779,14 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
|
||||
<label for="status" class="control-label col-sm-2"><?php echo $hesklang['status']; ?>:</label>
|
||||
<div class="col-sm-10">
|
||||
<?php
|
||||
$getStatusCheckboxSql = 'SELECT `ID`, `ShortNameContentKey`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$getStatusCheckboxSql = 'SELECT `ID`, `Key`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$getStatusCheckboxRS = hesk_dbQuery($getStatusCheckboxSql);
|
||||
while ($row = $getStatusCheckboxRS->fetch_assoc())
|
||||
{
|
||||
?>
|
||||
<div class="col-xs-4">
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" name="s<?php echo $row['ID']; ?>" value="1" <?php if (isset($status[$row['ID']])) {echo 'checked="checked"';} ?> /> <span style="color: <?php echo $row['TextColor']; ?>"><?php echo $hesklang[$row['ShortNameContentKey']]; ?></span></label>
|
||||
<label><input type="checkbox" name="s<?php echo $row['ID']; ?>" value="1" <?php if (isset($status[$row['ID']])) {echo 'checked="checked"';} ?> /> <span style="color: <?php echo $row['TextColor']; ?>"><?php echo $hesklang[$row['Key']]; ?></span></label>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
408
admin/manage_statuses.php
Normal file
408
admin/manage_statuses.php
Normal file
@ -0,0 +1,408 @@
|
||||
<?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');
|
||||
hesk_load_database_functions();
|
||||
|
||||
hesk_session_start();
|
||||
hesk_dbConnect();
|
||||
hesk_isLoggedIn();
|
||||
|
||||
// TODO Change to 'can_manage_ticket_statuses'
|
||||
//hesk_checkPermission('can_manage_ticket_statuses');
|
||||
|
||||
define('WYSIWYG',1);
|
||||
|
||||
// Are we performing an action?
|
||||
if (isset($_POST['action'])) {
|
||||
if ($_POST['action'] == 'save') {
|
||||
save();
|
||||
}
|
||||
}
|
||||
/* Print header */
|
||||
require_once(HESK_PATH . 'inc/headerAdmin.inc.php');
|
||||
|
||||
/* Print main manage users page */
|
||||
require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
|
||||
?>
|
||||
|
||||
<div class="row" style="padding: 20px">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<?php
|
||||
// Show a link to banned_emails.php if user has permission
|
||||
if ( hesk_checkPermission('can_ban_emails',0) )
|
||||
{
|
||||
echo '
|
||||
<li role="presentation">
|
||||
<a title="' . $hesklang['banemail'] . '" href="banned_emails.php">'.$hesklang['banemail'].'</a>
|
||||
</li>
|
||||
';
|
||||
}
|
||||
if ( hesk_checkPermission('can_ban_ips',0) )
|
||||
{
|
||||
echo '
|
||||
<li role="presentation">
|
||||
<a title="' . $hesklang['banip'] . '" href="banned_ips.php">'.$hesklang['banip'].'</a>
|
||||
</li>';
|
||||
}
|
||||
// Show a link to status_message.php if user has permission to do so
|
||||
if ( hesk_checkPermission('can_service_msg',0) )
|
||||
{
|
||||
echo '
|
||||
<li role="presentation">
|
||||
<a title="' . $hesklang['sm_title'] . '" href="service_messages.php">' . $hesklang['sm_title'] . '</a>
|
||||
</li>';
|
||||
}
|
||||
if ( hesk_checkPermission('can_manage_email_templates',0) )
|
||||
{
|
||||
echo '
|
||||
<li role="presentation">
|
||||
<a title="'.$hesklang['email_templates'].'" href="manage_email_templates.php">'.$hesklang['email_templates'].'</a>
|
||||
</li>
|
||||
';
|
||||
}
|
||||
?>
|
||||
<li role="presentation" class="active">
|
||||
<a href="#"><?php echo $hesklang['statuses']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['statuses']; ?>" data-content="<?php echo $hesklang['statuses_intro']; ?>"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="tab-content summaryList tabPadding">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<?php
|
||||
/* This will handle error, success and notice messages */
|
||||
hesk_handle_messages();
|
||||
|
||||
?>
|
||||
<h6 style="font-weight: bold"><?php echo $hesklang['basicProperties']; ?></h6>
|
||||
<div class="footerWithBorder blankSpace"></div>
|
||||
<?php
|
||||
//-- We need to get all of the statuses and dump the information to the page.
|
||||
$statusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`';
|
||||
$closedStatusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 1';
|
||||
$openStatusesSql = 'SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 0';
|
||||
$statusesRS = hesk_dbQuery($statusesSql);
|
||||
?>
|
||||
<form class="form-horizontal" method="post" action="manage_statuses.php" role="form">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo $hesklang['name']; ?></th>
|
||||
<th><?php echo $hesklang['language_key']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['language_key']; ?>" data-content="<?php echo $hesklang['language_key_description']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['textColor']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" title="<?php echo $hesklang['textColor']; ?>" data-content="<?php echo $hesklang['textColorDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['closable_question']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="htmlpopover" data-placement="bottom" title="<?php echo $hesklang['closable_question']; ?>" data-content="<?php echo $hesklang['closable_description']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['closedQuestionMark']; ?> <i class="fa fa-question-circle settingsquestionmark" data-toggle="popover" data-placement="top" title="<?php echo $hesklang['closedQuestionMark']; ?>" data-content="<?php echo $hesklang['closedQuestionMarkDescr']; ?>"></i></th>
|
||||
<th><?php echo $hesklang['delete']; ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
//Print each status
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$checkedEcho = ($row['IsClosed'] == 1) ? 'checked="checked"' : '';
|
||||
$isDisabled = false;
|
||||
if ($row['IsNewTicketStatus'] || $row['IsClosedByClient'] || $row['IsCustomerReplyStatus'] ||
|
||||
$row['IsStaffClosedOption'] || $row['IsStaffReopenedStatus'] || $row['IsDefaultStaffReplyStatus'] ||
|
||||
$row['LockedTicketStatus'] || $row['IsAutocloseOption'])
|
||||
{
|
||||
$isDisabled = true;
|
||||
}
|
||||
|
||||
$yesSelected = $customersOnlySelected = $staffOnlySelected = $noSelected = '';
|
||||
if ($row['Closable'] == 'yes') { $yesSelected = 'selected'; }
|
||||
elseif ($row['Closable'] == 'conly') { $customersOnlySelected = 'selected'; }
|
||||
elseif ($row['Closable'] == 'sonly') { $staffOnlySelected = 'selected'; }
|
||||
else { $noSelected = 'selected'; }
|
||||
|
||||
echo '<tr id="s'.$row['ID'].'_row">';
|
||||
echo '<td>'.$hesklang[$row['Key']].'</td>'; //Name
|
||||
echo '<td><input type="text" class="form-control" name="s'.$row['ID'].'_key" value="'.$row['Key'].'" placeholder="'.htmlspecialchars($hesklang['language_key']).'"></td>'; // Language File Key
|
||||
echo '<td><input type="text" class="form-control" name="s'.$row['ID'].'_textColor" value="'.$row['TextColor'].'" placeholder="'.htmlspecialchars($hesklang['textColor']).'"></td>'; // Text Color
|
||||
echo '<td>
|
||||
<select class="form-control" name="s'.$row['ID'].'_closable">
|
||||
<option value="yes" '.$yesSelected.'>'.$hesklang['yes_title_case'].'</option>
|
||||
<option value="conly" '.$customersOnlySelected.'>'.$hesklang['customers_only'].'</option>
|
||||
<option value="sonly" '.$staffOnlySelected.'>'.$hesklang['staff_only'].'</option>
|
||||
<option value="no" '.$noSelected.'>'.$hesklang['no_title_case'].'</option>
|
||||
</select>
|
||||
</td>';
|
||||
echo '<td><input type="checkbox" name="s'.$row['ID'].'_isClosed" value="1" '.$checkedEcho.'></td>'; // Resolved Status?
|
||||
echo '<td>';
|
||||
if ($isDisabled)
|
||||
{
|
||||
echo '<i class="fa fa-ban" style="color: red; font-size: 1.2em; font-weight: bold" data-toggle="popover" data-placement="left" title="'.$hesklang['whyCantIDeleteThisStatus'].'" data-content="'.$hesklang['whyCantIDeleteThisStatusReason'].'"></i>';
|
||||
} else
|
||||
{
|
||||
echo '<input type="checkbox" onclick="toggleRow(\'s'.$row['ID'].'_row\')" name="s'.$row['ID'].'_delete" value="1">';
|
||||
}
|
||||
echo '</td>'; //Delete status?
|
||||
echo '</tr>';
|
||||
}
|
||||
|
||||
//Print out an additional blank space for adding a status
|
||||
echo '<tr class="info">';
|
||||
echo '<td><b>'.$hesklang['addNew'].'</b></td>';
|
||||
echo '<td><input type="text" class="form-control" name="sN_key" value="" placeholder="'.htmlspecialchars($hesklang['language_key']).'"></td>'; // Language File Key
|
||||
echo '<td><input type="text" class="form-control" name="sN_textColor" value="" placeholder="'.htmlspecialchars($hesklang['textColor']).'"></td>'; // Text Color
|
||||
echo '<td>
|
||||
<select class="form-control" name="sN_closable">
|
||||
<option value="yes">'.$hesklang['yes_title_case'].'</option>
|
||||
<option value="conly">'.$hesklang['customers_only'].'</option>
|
||||
<option value="sonly">'.$hesklang['staff_only'].'</option>
|
||||
<option value="no">'.$hesklang['no_title_case'].'</option>
|
||||
</select>
|
||||
</td>';
|
||||
echo '<td><input type="checkbox" name="sN_isClosed" value="1"></td>'; // Resolved Status?
|
||||
echo '<td></td>'; //Empty placeholder where the delete row is.
|
||||
echo '</tr>';
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h6 style="font-weight: bold"><?php echo $hesklang['defaultStatusForAction']; ?></h6>
|
||||
<div class="footerWithBorder blankSpace"></div>
|
||||
<div class="form-group">
|
||||
<label for="newTicket" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isNewTicketMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="newTicket" class="form-control" id="newTicket">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsNewTicketStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="closedByClient" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isClosedByClientMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="closedByClient" class="form-control" id="closedByClient">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsClosedByClient'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="replyFromClient" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isRepliedByClientMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="replyFromClient" class="form-control" id="replyFromClient">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsCustomerReplyStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="staffClosedOption" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isStaffClosedOptionMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="staffClosedOption" class="form-control" id="staffClosedOption">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsStaffClosedOption'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="staffReopenedStatus" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isStaffReopenedStatusMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="staffReopenedStatus" class="form-control" id="staffReopenedStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsStaffReopenedStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="defaultStaffReplyStatus" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['isDefaultStaffReplyStatusMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="defaultStaffReplyStatus" class="form-control" id="defaultStaffReplyStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($openStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsDefaultStaffReplyStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="lockedTicketStatus" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['lockedTicketStatusMsg']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="lockedTicketStatus" class="form-control" id="lockedTicketStatus">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($statusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['LockedTicketStatus'] == 1) ? 'selected="selected"' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="autocloseTicketOption" class="col-sm-6 col-xs-12 control-label"><?php echo $hesklang['autoclose_ticket_status']; ?></label>
|
||||
<div class="col-sm-6 col-xs-12">
|
||||
<select name="autocloseTicketOption" class="form-control" id="autocloseTicketOption">
|
||||
<?php
|
||||
$statusesRS = hesk_dbQuery($closedStatusesSql);
|
||||
while ($row = $statusesRS->fetch_assoc())
|
||||
{
|
||||
$selectedEcho = ($row['IsAutocloseOption'] == 1) ? 'selected' : '';
|
||||
echo '<option value="'.$row['ID'].'" '.$selectedEcho.'>'.$hesklang[$row['Key']].'</option>';
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-sm-offset-6">
|
||||
<input type="hidden" name="action" value="save">
|
||||
<input type="submit" class="btn btn-default" value="<?php echo $hesklang['save_changes']; ?>">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
require_once(HESK_PATH . 'inc/footer.inc.php');
|
||||
exit();
|
||||
|
||||
function save() {
|
||||
global $hesklang, $hesk_settings;
|
||||
|
||||
hesk_dbConnect();
|
||||
$wasStatusDeleted = false;
|
||||
//-- Get all the status IDs
|
||||
$statusesSql = 'SELECT * FROM `'.$hesk_settings['db_pfix'].'statuses`';
|
||||
$results = hesk_dbQuery($statusesSql);
|
||||
while ($row = $results->fetch_assoc())
|
||||
{
|
||||
//-- If the status is marked for deletion, delete it and skip everything below.
|
||||
if (isset($_POST['s'.$row['ID'].'_delete']))
|
||||
{
|
||||
$delete = "DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($delete);
|
||||
$stmt->bind_param('i', $row['ID']);
|
||||
$stmt->execute();
|
||||
$wasStatusDeleted = true;
|
||||
} else
|
||||
{
|
||||
//-- Update the information in the database with what is on the page
|
||||
$query = "UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET `Key` = ?, `TextColor` = ?, `IsClosed` = ?, `Closable` = ? WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($query);
|
||||
$isStatusClosed = (isset($_POST['s'.$row['ID'].'_isClosed']) ? 1 : 0);
|
||||
$stmt->bind_param('sssisi', $_POST['s'.$row['ID'].'_key'], $_POST['s'.$row['ID'].'_textColor'], $isStatusClosed, $_POST['s'.$row['ID'].'_closable'], $row['ID']);
|
||||
$stmt->execute();
|
||||
}
|
||||
}
|
||||
|
||||
//-- If any statuses were deleted, re-index them before adding a new one
|
||||
if ($wasStatusDeleted) {
|
||||
//-- First drop and re-add the ID column
|
||||
hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` DROP COLUMN `ID`");
|
||||
hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` ADD `ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
|
||||
|
||||
//-- Since statuses should be zero-based, but are now one-based, subtract one from each ID
|
||||
hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET `ID` = `ID`-1");
|
||||
}
|
||||
|
||||
//-- Insert the addition if there is anything to add
|
||||
if ($_POST['sN_key'] != null && $_POST['sN_textColor'] != null)
|
||||
{
|
||||
//-- The next ID is equal to the number of rows, since the IDs are zero-indexed.
|
||||
$nextValue = hesk_dbQuery('SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`')->num_rows;
|
||||
$isClosed = isset($_POST['sN_isClosed']) ? 1 : 0;
|
||||
$insert = "INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` (`ID`, `Key`, `TextColor`, `IsClosed`, `Closable`)
|
||||
VALUES (".$nextValue.", '".hesk_dbEscape($_POST['sN_key'])."', '".hesk_dbEscape($_POST['sN_textColor'])."', ".$isClosed.", '".hesk_dbEscape($_POST['sN_closable'])."')";
|
||||
hesk_dbQuery($insert);
|
||||
}
|
||||
|
||||
//-- Update default status for actions
|
||||
$defaultQuery = "UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET ";
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsNewTicketStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsNewTicketStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['newTicket']);
|
||||
$stmt->execute();
|
||||
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsClosedByClient` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsClosedByClient` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['closedByClient']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsCustomerReplyStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsCustomerReplyStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['replyFromClient']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsStaffClosedOption` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsStaffClosedOption` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['staffClosedOption']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsStaffReopenedStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsStaffReopenedStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['staffReopenedStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsDefaultStaffReplyStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsDefaultStaffReplyStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['defaultStaffReplyStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`LockedTicketStatus` = 0");
|
||||
$updateQuery = $defaultQuery . "`LockedTicketStatus` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['lockedTicketStatus']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_dbConnect()->query($defaultQuery . "`IsAutocloseOption` = 0");
|
||||
$updateQuery = $defaultQuery . "`IsAutocloseOption` = 1 WHERE `ID` = ?";
|
||||
$stmt = hesk_dbConnect()->prepare($updateQuery);
|
||||
$stmt->bind_param('i', $_POST['autocloseTicketOption']);
|
||||
$stmt->execute();
|
||||
|
||||
hesk_process_messages($hesklang['statuses_saved'],'manage_statuses.php','SUCCESS');
|
||||
}
|
||||
@ -608,9 +608,9 @@ function hesk_getEmailSubject($eml_file, $ticket='', $is_ticket=1, $strip=0)
|
||||
}
|
||||
|
||||
/* Set status */
|
||||
$statusRs = hesk_dbQuery("SELECT `ShortNameContentKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ".$ticket['status']);
|
||||
$statusRs = hesk_dbQuery("SELECT `Key` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ".$ticket['status']);
|
||||
$row = hesk_dbFetchAssoc($statusRs);
|
||||
$ticket['status'] = $hesklang[$row['ShortNameContentKey']];
|
||||
$ticket['status'] = $hesklang[$row['Key']];
|
||||
|
||||
/* Replace all special tags */
|
||||
$msg = str_replace('%%SUBJECT%%', $ticket['subject'], $msg);
|
||||
@ -778,9 +778,9 @@ function hesk_processMessage($msg, $ticket, $is_admin, $is_ticket, $just_message
|
||||
$ticket['owner'] = hesk_msgToPlain( hesk_getOwnerName($ticket['owner']), 1);
|
||||
|
||||
/* Set status */
|
||||
$statusRs = hesk_dbQuery("SELECT `ShortNameContentKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ".$ticket['status']);
|
||||
$statusRs = hesk_dbQuery("SELECT `Key` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE `ID` = ".$ticket['status']);
|
||||
$row = hesk_dbFetchAssoc($statusRs);
|
||||
$ticket['status'] = $hesklang[$row['ShortNameContentKey']];
|
||||
$ticket['status'] = $hesklang[$row['Key']];
|
||||
|
||||
/* Replace all special tags */
|
||||
$msg = str_replace('%%NAME%%', $ticket['name'] ,$msg);
|
||||
|
||||
@ -38,10 +38,10 @@ if ( ! isset($status) )
|
||||
{
|
||||
$status = array();
|
||||
//-- We don't want to check statuses that are considered "closed"
|
||||
$statusRS = hesk_dbQuery('SELECT `ID`, `ShortNameContentKey` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 0');
|
||||
$statusRS = hesk_dbQuery('SELECT `ID`, `Key` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses` WHERE `IsClosed` = 0');
|
||||
while ($row = $statusRS->fetch_assoc())
|
||||
{
|
||||
$status[$row['ID']] = $row['ShortNameContentKey'];
|
||||
$status[$row['ID']] = $row['Key'];
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ $more2 = empty($_GET['more2']) ? 0 : 1;
|
||||
<tr>
|
||||
<?php
|
||||
$rowCounter = 1;
|
||||
$statusRS = hesk_dbQuery('SELECT `ID`, `ShortNameContentKey`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`');
|
||||
$statusRS = hesk_dbQuery('SELECT `ID`, `Key`, `TextColor` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'statuses`');
|
||||
while ($row = $statusRS->fetch_assoc())
|
||||
{
|
||||
if ($rowCounter > 3)
|
||||
@ -149,7 +149,7 @@ $more2 = empty($_GET['more2']) ? 0 : 1;
|
||||
}
|
||||
echo '<label><input type="checkbox" name="s'.$row['ID'].'" value="1"';
|
||||
if (isset($status[$row['ID']])) {echo 'checked="checked"';}
|
||||
echo '/> <span style="font-weight: bold;color: '.$row['TextColor'].';">'.$hesklang[$row['ShortNameContentKey']].'</span></label></td>';
|
||||
echo '/> <span style="font-weight: bold;color: '.$row['TextColor'].';">'.$hesklang[$row['Key']].'</span></label></td>';
|
||||
|
||||
$rowCounter++;
|
||||
}
|
||||
|
||||
@ -386,8 +386,8 @@ if ($total > 0)
|
||||
// Print ticket status
|
||||
if ( hesk_show_column('status') )
|
||||
{
|
||||
$statusName = hesk_dbFetchAssoc(hesk_dbQuery("SELECT `ShortNameContentKey`, `TextColor` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE ID = ".$ticket['status']));
|
||||
$ticket['status']='<span style="color: '.$statusName['TextColor'].'">'.$hesklang[$statusName['ShortNameContentKey']].'</span>';
|
||||
$statusName = hesk_dbFetchAssoc(hesk_dbQuery("SELECT `Key`, `TextColor` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` WHERE ID = ".$ticket['status']));
|
||||
$ticket['status']='<span style="color: '.$statusName['TextColor'].'">'.$hesklang[$statusName['Key']].'</span>';
|
||||
echo '<td class="'.$color.'">'.$ticket['status'].' </td>';
|
||||
}
|
||||
|
||||
|
||||
@ -1194,11 +1194,11 @@ function forgot_tid()
|
||||
}
|
||||
|
||||
/* Prepare ticket statuses */
|
||||
$myStatusSQL = hesk_dbQuery("SELECT `ID`, `TicketViewContentKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`");
|
||||
$myStatusSQL = hesk_dbQuery("SELECT `ID`, `Key` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses`");
|
||||
$my_status = array();
|
||||
while ($myStatusRow = hesk_dbFetchAssoc($myStatusSQL))
|
||||
{
|
||||
$my_status[$myStatusRow['ID']] = $hesklang[$myStatusRow['TicketViewContentKey']];
|
||||
$my_status[$myStatusRow['ID']] = $hesklang[$myStatusRow['Key']];
|
||||
}
|
||||
|
||||
// Get tickets from the database
|
||||
|
||||
@ -444,6 +444,10 @@ function execute230Scripts() {
|
||||
|
||||
hesk_dbConnect();
|
||||
executeQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."service_messages` ADD COLUMN `icon` VARCHAR(150)");
|
||||
executeQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` ADD COLUMN `Key` TEXT");
|
||||
executeQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` SET `Key` = `ShortNameContentKey`");
|
||||
executeQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` DROP COLUMN `ShortNameContentKey`");
|
||||
executeQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` DROP COLUMN `TicketViewContentKey`");
|
||||
executeQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."settings` SET `Value` = '2.3.0' WHERE `Key` = 'modsForHeskVersion'");
|
||||
}
|
||||
// END Version 2.3.0
|
||||
@ -29,6 +29,10 @@ $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['language_key'] = 'Language Key';
|
||||
$hesklang['language_key_description'] = 'This is the language file \'key\' that contains the text you want to display';
|
||||
|
||||
// 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 (:)
|
||||
@ -226,10 +230,6 @@ $hesklang['changeLanguage'] = 'Change language to';
|
||||
// ADDED OR MODIFIED IN Mods For HESK 1.2
|
||||
$hesklang['statuses'] = 'Statuses';
|
||||
$hesklang['basicProperties'] = 'Basic Properties';
|
||||
$hesklang['shortNameKey'] = 'Short Name Key';
|
||||
$hesklang['shortNameKeyDescr'] = "This is the language file 'key' that contains the text you want to display on all pages that have statuses, except for the ticket view pages (ticket.php, admin_ticket.php, and print.php)";
|
||||
$hesklang['longNameKey'] = 'Long Name Key';
|
||||
$hesklang['longNameKeyDescr'] = "This is the language file 'key' that contains the text you want to display on ticket.php, print.php, and admin_ticket.php";
|
||||
$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?';
|
||||
|
||||
@ -60,7 +60,7 @@ if ( empty($_SESSION['id']) )
|
||||
}
|
||||
|
||||
/* Get ticket info */
|
||||
$res = hesk_dbQuery("SELECT `t1`.* , `ticketStatus`.`IsClosed` AS `isClosed`, `ticketStatus`.`TicketViewContentKey` AS `statusKey`, `t2`.name AS `repliername`
|
||||
$res = hesk_dbQuery("SELECT `t1`.* , `ticketStatus`.`IsClosed` AS `isClosed`, `ticketStatus`.`Key` AS `statusKey`, `t2`.name AS `repliername`
|
||||
FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1` LEFT JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."users` AS `t2` ON `t1`.`replierid` = `t2`.`id`
|
||||
INNER JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` AS `ticketStatus` ON `t1`.`status` = `ticketStatus`.`ID`
|
||||
WHERE `trackid`='".hesk_dbEscape($trackingID)."' LIMIT 1");
|
||||
|
||||
@ -106,7 +106,7 @@ hesk_dbConnect();
|
||||
hesk_limitBfAttempts();
|
||||
|
||||
/* Get ticket info */
|
||||
$res = hesk_dbQuery( "SELECT `t1`.* , `t2`.name AS `repliername`, `ticketStatus`.`IsClosed` AS `isClosed`, `ticketStatus`.`TicketViewContentKey` AS `statusKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1` INNER JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` AS `ticketStatus` ON `t1`.`status` = `ticketStatus`.`ID` LEFT JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."users` AS `t2` ON `t1`.`replierid` = `t2`.`id` WHERE `trackid`='".hesk_dbEscape($trackingID)."' LIMIT 1");
|
||||
$res = hesk_dbQuery( "SELECT `t1`.* , `t2`.name AS `repliername`, `ticketStatus`.`IsClosed` AS `isClosed`, `ticketStatus`.`Key` AS `statusKey` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` AS `t1` INNER JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."statuses` AS `ticketStatus` ON `t1`.`status` = `ticketStatus`.`ID` LEFT JOIN `".hesk_dbEscape($hesk_settings['db_pfix'])."users` AS `t2` ON `t1`.`replierid` = `t2`.`id` WHERE `trackid`='".hesk_dbEscape($trackingID)."' LIMIT 1");
|
||||
|
||||
/* Ticket found? */
|
||||
if (hesk_dbNumRows($res) != 1)
|
||||
@ -299,7 +299,7 @@ require_once(HESK_PATH . 'inc/header.inc.php');
|
||||
$repliesColumnWidth = 3;
|
||||
}
|
||||
echo '<div class="col-md-3 col-sm-12 ticket-cell"><p class="ticketPropertyTitle">'.$hesklang['status'].'</p>';
|
||||
$ticketStatusKey = $status['ShortNameContentKey'];
|
||||
$ticketStatusKey = $status['Key'];
|
||||
echo '<p class="ticketPropertyText">'.$hesklang[$ticketStatusKey].'</p>';
|
||||
echo '</div>';
|
||||
echo '<div class="col-md-3 col-sm-12 ticket-cell"><p class="ticketPropertyTitle">'.$hesklang['last_replier'].'</p>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user