@@ -1,33 +1,15 @@ | |||
admin/admin_main.php | |||
admin/admin_reply_ticket.php | |||
admin/admin_settings.php | |||
admin/admin_settings_save.php | |||
admin/admin_submit_ticket.php | |||
admin/admin_suggest_articles.php | |||
admin/admin_ticket.php | |||
admin/archive.php | |||
admin/assign_owner.php | |||
admin/change_status.php | |||
admin/delete_tickets.php | |||
admin/edit_post.php | |||
admin/export.php | |||
admin/find_tickets.php | |||
admin/generate_spam_question.php | |||
admin/index.php | |||
admin/knowledgebase_private.php | |||
admin/lock.php | |||
admin/mail.php | |||
admin/manage_canned.php | |||
admin/manage_categories.php | |||
admin/manage_knowledgebase.php | |||
admin/manage_users.php | |||
admin/move_category.php | |||
admin/new_ticket.php | |||
admin/options.php | |||
admin/priority.php | |||
admin/profile.php | |||
admin/reports.php | |||
admin/show_tickets.php | |||
admin/test_connection.php | |||
attachments/index.htm | |||
change_status.php | |||
@@ -41,7 +23,6 @@ file_limits.php | |||
footer.txt | |||
header.txt | |||
hesk_javascript_v25.js | |||
hesk_settings.inc.php | |||
hesk_style_v25.css | |||
img/add_article.png | |||
img/add_category.png | |||
@@ -187,14 +168,11 @@ inc/calendar/index.htm | |||
inc/calendar/tcal.css | |||
inc/calendar/tcal.js | |||
inc/calendar/tcal.php | |||
inc/common.inc.php | |||
inc/database.inc.php | |||
inc/database_mysqli.inc.php | |||
inc/email_functions.inc.php | |||
inc/footer.inc.php | |||
inc/header.inc.php | |||
inc/index.htm | |||
inc/knowledgebase_functions.inc.php | |||
inc/mail/email_parser.php | |||
inc/mail/hesk_pipe.php | |||
inc/mail/hesk_pop3.php | |||
@@ -223,12 +201,9 @@ inc/recaptcha/recaptchalib.php | |||
inc/reporting_functions.inc.php | |||
inc/secimg.inc.php | |||
inc/setup_functions.inc.php | |||
inc/show_admin_nav.inc.php | |||
inc/show_search_form.inc.php | |||
inc/tabs/index.htm | |||
inc/tabs/tabber-minimized.js | |||
inc/tabs/tabber.css | |||
inc/ticket_list.inc.php | |||
inc/timer/hesk_timer.js | |||
inc/timer/index.htm | |||
inc/tiny_mce/3.5.10/langs/en.js | |||
@@ -278,19 +253,13 @@ inc/tiny_mce/3.5.10/utils/form_utils.js | |||
inc/tiny_mce/3.5.10/utils/mctabs.js | |||
inc/tiny_mce/3.5.10/utils/validate.js | |||
inc/treemenu/TreeMenu.php | |||
inc/treemenu/TreeMenu_v25.js | |||
inc/treemenu/index.htm | |||
inc/users_online.inc.php | |||
inc/zip/Zip.php | |||
inc/zip/index.htm | |||
inc/zip/pclzip.lib.php | |||
index.php | |||
install/hesk.png | |||
install/index.php | |||
install/install.php | |||
install/install_functions.inc.php | |||
install/update.php | |||
knowledgebase.php | |||
language/en/emails/category_moved.txt | |||
language/en/emails/forgot_ticket_id.txt | |||
language/en/emails/index.htm | |||
@@ -301,24 +270,11 @@ language/en/emails/new_reply_by_staff.txt | |||
language/en/emails/new_ticket.txt | |||
language/en/emails/new_ticket_staff.txt | |||
language/en/emails/ticket_assigned_to_you.txt | |||
language/en/help_files/custom.html | |||
language/en/help_files/email.html | |||
language/en/help_files/general.html | |||
language/en/help_files/help_style.css | |||
language/en/help_files/helpdesk.html | |||
language/en/help_files/index.htm | |||
language/en/help_files/knowledgebase.html | |||
language/en/help_files/misc.html | |||
language/en/index.htm | |||
language/en/text.php | |||
language/index.htm | |||
print.php | |||
print_sec_img.php | |||
rate.php | |||
readme.html | |||
reply_ticket.php | |||
robots.txt | |||
submit_ticket.php | |||
suggest_articles.php | |||
suggest_email.php | |||
ticket.php |
@@ -0,0 +1,143 @@ | |||
<?php | |||
/******************************************************************************* | |||
* Title: Help Desk Software HESK | |||
* Version: 2.5.3 from 16th March 2014 | |||
* Author: Klemen Stirn | |||
* Website: http://www.hesk.com | |||
******************************************************************************** | |||
* COPYRIGHT AND TRADEMARK NOTICE | |||
* Copyright 2005-2013 Klemen Stirn. All Rights Reserved. | |||
* HESK is a registered trademark of Klemen Stirn. | |||
* The HESK may be used and modified free of charge by anyone | |||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT. | |||
* By using this code you agree to indemnify Klemen Stirn from any | |||
* liability that might arise from it's use. | |||
* Selling the code for this program, in part or full, without prior | |||
* written consent is expressly forbidden. | |||
* Using this code, in part or full, to create derivate work, | |||
* new scripts or products is expressly forbidden. Obtain permission | |||
* before redistributing this software over the Internet or in | |||
* any other medium. In all cases copyright and header must remain intact. | |||
* This Copyright is in full effect in any country that has International | |||
* Trade Agreements with the United States of America or | |||
* with the European Union. | |||
* Removing any of the copyright notices without purchasing a license | |||
* is expressly forbidden. To remove HESK copyright notice you must purchase | |||
* a license for this script. For more information on how to obtain | |||
* a license please visit the page below: | |||
* https://www.hesk.com/buy.php | |||
*******************************************************************************/ | |||
define('IN_SCRIPT',1); | |||
define('HESK_PATH','../'); | |||
/* Make sure the install folder is deleted */ | |||
if (is_dir(HESK_PATH . 'install')) {die('Please delete the <b>install</b> folder from your server for security reasons then refresh this page!');} | |||
/* 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(); | |||
define('CALENDAR',1); | |||
define('MAIN_PAGE',1); | |||
/* Print header */ | |||
require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); | |||
/* Print admin navigation */ | |||
require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); | |||
?> | |||
<div class="row"> | |||
<div class="col-md-8 col-md-offset-2" style="padding-top: 20px"> | |||
<?php | |||
/* This will handle error, success and notice messages */ | |||
hesk_handle_messages(); | |||
/* Print tickets? */ | |||
if (hesk_checkPermission('can_view_tickets',0)) | |||
{ | |||
if ( ! isset($_SESSION['hide']['ticket_list']) ) //Number of tickets (table header. NOT ACTUAL TABLE) | |||
{ | |||
echo ' | |||
<div class="row"> | |||
<div class="col-md-4"> </div> | |||
<div class="col-md-4" style="text-align: center"><h3>'.$hesklang['open_tickets'].'</h3></div> | |||
<div class="col-md-4"> </div> | |||
</div> | |||
'; | |||
} | |||
/* Reset default settings? */ | |||
if ( isset($_GET['reset']) && hesk_token_check() ) | |||
{ | |||
$res = hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."users` SET `default_list`='' WHERE `id` = '".intval($_SESSION['id'])."' LIMIT 1"); | |||
$_SESSION['default_list'] = ''; | |||
} | |||
/* Get default settings */ | |||
else | |||
{ | |||
parse_str($_SESSION['default_list'],$defaults); | |||
$_GET = isset($_GET) && is_array($_GET) ? array_merge($_GET, $defaults) : $defaults; | |||
} | |||
/* Print the list of tickets */ | |||
require(HESK_PATH . 'inc/print_tickets.inc.php'); | |||
echo " <br />"; | |||
/* Print forms for listing and searching tickets */ | |||
require(HESK_PATH . 'inc/show_search_form.inc.php'); | |||
} | |||
else | |||
{ | |||
echo '<p><i>'.$hesklang['na_view_tickets'].'</i></p>'; | |||
} | |||
$hesk_settings['hesk_license']('HMgPSAxOw0KaWYgKGZpbGVfZXhpc3RzKEhFU0tfUEFUSCAuI | |||
CdoZXNrX2xpY2Vuc2UucGhwJykpDQp7DQokaCA9ICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfSE9TVCddK | |||
SkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAoKCFlbXB0eSgkX1NFUlZFUlsnU0VSVkVSX05BTUUnX | |||
SkpID8gJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10gOiBnZXRlbnYoJ1NFUlZFUl9OQU1FJykpOw0KJGggP | |||
SBzdHJfcmVwbGFjZSgnd3d3LicsJycsc3RydG9sb3dlcigkaCkpOw0KaW5jbHVkZShIRVNLX1BBVEggL | |||
iAnaGVza19saWNlbnNlLnBocCcpOw0KaWYgKGlzc2V0KCRoZXNrX3NldHRpbmdzWydsaWNlbnNlJ10pI | |||
CYmIHN0cnBvcygkaGVza19zZXR0aW5nc1snbGljZW5zZSddLHNoYTEoJGguJ2gzJkZwMiNMYUEmNTkhd | |||
yg4LlpjXSordVI1MTInKSkgIT09IGZhbHNlKQ0Kew0KJHMgPSAwOw0KfQ0KZWxzZQ0Kew0KZWNobyAnP | |||
HAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO2NvbG9yOnJlZDsiPklOVkFMSUQgTElDRU5TRSAoTk9UI | |||
FJFR0lTVEVSRUQgRk9SICcuJGguJykhPC9wPic7DQp9DQp9DQppZiAoJHMpDQp7DQplY2hvICc8aHIgL | |||
z48dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+PHRyPjx0ZD48Yj4nLiRoZXNrbGFuZ1sncmVtb | |||
3ZlX3N0YXRlbWVudCddLic8L2I+PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZ | |||
WY9IkphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0iYWxlcnQoXCcnLiRoZXNrbGFuZ1snc3VwcG9yd | |||
F9ub3RpY2UnXS4nXCcpIj4nLiRoZXNrbGFuZ1snc2gnXS4nPC9hPjwvdGQ+PC90cj48L3RhYmxlPjxwP | |||
icuJGhlc2tsYW5nWydzdXBwb3J0X3JlbW92ZSddLicuIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lmhlc2suY | |||
29tL2J1eS5waHAiIHRhcmdldD0iX2JsYW5rIj4nLiRoZXNrbGFuZ1snY2xpY2tfaW5mbyddLic8L2E+P | |||
C9wPic7DQp9DQo=',"\112"); | |||
echo '<hr /> <br />'; | |||
/* Clean unneeded session variables */ | |||
hesk_cleanSessionVars('hide'); | |||
?> | |||
</div> | |||
</div> | |||
<?php | |||
require_once(HESK_PATH . 'inc/footer.inc.php'); | |||
exit(); | |||
?> |
@@ -0,0 +1,322 @@ | |||
<?php | |||
/******************************************************************************* | |||
* Title: Help Desk Software HESK | |||
* Version: 2.5.3 from 16th March 2014 | |||
* Author: Klemen Stirn | |||
* Website: http://www.hesk.com | |||
******************************************************************************** | |||
* COPYRIGHT AND TRADEMARK NOTICE | |||
* Copyright 2005-2013 Klemen Stirn. All Rights Reserved. | |||
* HESK is a registered trademark of Klemen Stirn. | |||
* The HESK may be used and modified free of charge by anyone | |||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT. | |||
* By using this code you agree to indemnify Klemen Stirn from any | |||
* liability that might arise from it's use. | |||
* Selling the code for this program, in part or full, without prior | |||
* written consent is expressly forbidden. | |||
* Using this code, in part or full, to create derivate work, | |||
* new scripts or products is expressly forbidden. Obtain permission | |||
* before redistributing this software over the Internet or in | |||
* any other medium. In all cases copyright and header must remain intact. | |||
* This Copyright is in full effect in any country that has International | |||
* Trade Agreements with the United States of America or | |||
* with the European Union. | |||
* Removing any of the copyright notices without purchasing a license | |||
* is expressly forbidden. To remove HESK copyright notice you must purchase | |||
* a license for this script. For more information on how to obtain | |||
* a license please visit the page below: | |||
* https://www.hesk.com/buy.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(); | |||
require(HESK_PATH . 'inc/email_functions.inc.php'); | |||
require(HESK_PATH . 'inc/posting_functions.inc.php'); | |||
hesk_session_start(); | |||
hesk_dbConnect(); | |||
hesk_isLoggedIn(); | |||
// We only allow POST requests from the HESK form to this file | |||
if ( $_SERVER['REQUEST_METHOD'] != 'POST' ) | |||
{ | |||
header('Location: admin_main.php'); | |||
exit(); | |||
} | |||
// Check for POST requests larger than what the server can handle | |||
if ( empty($_POST) && ! empty($_SERVER['CONTENT_LENGTH']) ) | |||
{ | |||
hesk_error($hesklang['maxpost']); | |||
} | |||
$hesk_error_buffer = array(); | |||
$tmpvar['name'] = hesk_input( hesk_POST('name') ) or $hesk_error_buffer['name']=$hesklang['enter_your_name']; | |||
$tmpvar['email'] = hesk_validateEmail( hesk_POST('email'), 'ERR', 0) or $hesk_error_buffer['email']=$hesklang['enter_valid_email']; | |||
$tmpvar['category'] = intval( hesk_POST('category') ) or $hesk_error_buffer['category']=$hesklang['sel_app_cat']; | |||
$tmpvar['priority'] = intval( hesk_POST('priority') ); | |||
if ($tmpvar['priority'] < 0 || $tmpvar['priority'] > 3) | |||
{ | |||
$hesk_error_buffer['priority']=$hesklang['sel_app_priority']; | |||
} | |||
$tmpvar['subject'] = hesk_input( hesk_POST('subject') ) or $hesk_error_buffer['subject']=$hesklang['enter_ticket_subject']; | |||
$tmpvar['message'] = hesk_input( hesk_POST('message') ) or $hesk_error_buffer['message']=$hesklang['enter_message']; | |||
// Is category a valid choice? | |||
if ($tmpvar['category']) | |||
{ | |||
hesk_verifyCategory(1); | |||
// Is auto-assign of tickets disabled in this category? | |||
if ( empty($hesk_settings['category_data'][$tmpvar['category']]['autoassign']) ) | |||
{ | |||
$hesk_settings['autoassign'] = false; | |||
} | |||
} | |||
// Custom fields | |||
foreach ($hesk_settings['custom_fields'] as $k=>$v) | |||
{ | |||
if ($v['use'] && isset($_POST[$k])) | |||
{ | |||
if (is_array($_POST[$k])) | |||
{ | |||
$tmpvar[$k]=''; | |||
foreach ($_POST[$k] as $myCB) | |||
{ | |||
$tmpvar[$k] .= ( is_array($myCB) ? '' : hesk_input($myCB) ) . '<br />'; | |||
} | |||
$tmpvar[$k]=substr($tmpvar[$k],0,-6); | |||
} | |||
else | |||
{ | |||
$tmpvar[$k]=hesk_makeURL(nl2br(hesk_input($_POST[$k]))); | |||
} | |||
} | |||
else | |||
{ | |||
$tmpvar[$k] = ''; | |||
} | |||
} | |||
// Generate tracking ID | |||
$tmpvar['trackid'] = hesk_createID(); | |||
// Log who submitted ticket | |||
$tmpvar['history'] = sprintf($hesklang['thist7'], hesk_date(), $_SESSION['name'].' ('.$_SESSION['user'].')'); | |||
// Owner | |||
$tmpvar['owner'] = 0; | |||
if (hesk_checkPermission('can_assign_others',0)) | |||
{ | |||
$tmpvar['owner'] = intval( hesk_POST('owner') ); | |||
// If ID is -1 the ticket will be unassigned | |||
if ($tmpvar['owner'] == -1) | |||
{ | |||
$tmpvar['owner'] = 0; | |||
} | |||
// Automatically assign owner? | |||
elseif ($tmpvar['owner'] == -2 && $hesk_settings['autoassign'] == 1) | |||
{ | |||
$autoassign_owner = hesk_autoAssignTicket($tmpvar['category']); | |||
if ($autoassign_owner) | |||
{ | |||
$tmpvar['owner'] = intval($autoassign_owner['id']); | |||
$tmpvar['history'] .= sprintf($hesklang['thist10'],hesk_date(),$autoassign_owner['name'].' ('.$autoassign_owner['user'].')'); | |||
} | |||
else | |||
{ | |||
$tmpvar['owner'] = 0; | |||
} | |||
} | |||
// Check for invalid owner values | |||
elseif ($tmpvar['owner'] < 1) | |||
{ | |||
$tmpvar['owner'] = 0; | |||
} | |||
else | |||
{ | |||
// Has the new owner access to the selected category? | |||
$res = hesk_dbQuery("SELECT `name`,`isadmin`,`categories` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."users` WHERE `id`='{$tmpvar['owner']}' LIMIT 1"); | |||
if (hesk_dbNumRows($res) == 1) | |||
{ | |||
$row = hesk_dbFetchAssoc($res); | |||
if (!$row['isadmin']) | |||
{ | |||
$row['categories']=explode(',',$row['categories']); | |||
if (!in_array($tmpvar['category'],$row['categories'])) | |||
{ | |||
$_SESSION['isnotice'][] = 'category'; | |||
$hesk_error_buffer['owner']=$hesklang['onasc']; | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
$_SESSION['isnotice'][] = 'category'; | |||
$hesk_error_buffer['owner']=$hesklang['onasc']; | |||
} | |||
} | |||
} | |||
elseif (hesk_checkPermission('can_assign_self',0) && hesk_okCategory($tmpvar['category'],0) && !empty($_POST['assing_to_self'])) | |||
{ | |||
$tmpvar['owner'] = intval($_SESSION['id']); | |||
} | |||
// Notify customer of the ticket? | |||
$notify = ! empty($_POST['notify']) ? 1 : 0; | |||
// Show ticket after submission? | |||
$show = ! empty($_POST['show']) ? 1 : 0; | |||
// Attachments | |||
if ($hesk_settings['attachments']['use']) | |||
{ | |||
require_once(HESK_PATH . 'inc/attachments.inc.php'); | |||
$attachments = array(); | |||
$trackingID = $tmpvar['trackid']; | |||
for ($i=1;$i<=$hesk_settings['attachments']['max_number'];$i++) | |||
{ | |||
$att = hesk_uploadFile($i); | |||
if ($att !== false && !empty($att)) | |||
{ | |||
$attachments[$i] = $att; | |||
} | |||
} | |||
} | |||
$tmpvar['attachments'] = ''; | |||
// If we have any errors lets store info in session to avoid re-typing everything | |||
if (count($hesk_error_buffer)!=0) | |||
{ | |||
$_SESSION['iserror'] = array_keys($hesk_error_buffer); | |||
$_SESSION['as_name'] = hesk_POST('name'); | |||
$_SESSION['as_email'] = hesk_POST('email'); | |||
$_SESSION['as_category'] = hesk_POST('category'); | |||
$_SESSION['as_priority'] = hesk_POST('priority'); | |||
$_SESSION['as_subject'] = hesk_POST('subject'); | |||
$_SESSION['as_message'] = hesk_POST('message'); | |||
$_SESSION['as_owner'] = $tmpvar['owner']; | |||
$_SESSION['as_notify'] = $notify; | |||
$_SESSION['as_show'] = $show; | |||
foreach ($hesk_settings['custom_fields'] as $k=>$v) | |||
{ | |||
if ($v['use']) | |||
{ | |||
$_SESSION["as_$k"] = hesk_POST($k); | |||
} | |||
} | |||
$tmp = ''; | |||
foreach ($hesk_error_buffer as $error) | |||
{ | |||
$tmp .= "<li>$error</li>\n"; | |||
} | |||
$hesk_error_buffer = $tmp; | |||
// Remove any successfully uploaded attachments | |||
if ($hesk_settings['attachments']['use']) | |||
{ | |||
hesk_removeAttachments($attachments); | |||
} | |||
$hesk_error_buffer = $hesklang['pcer'].'<br /><br /><ul>'.$hesk_error_buffer.'</ul>'; | |||
hesk_process_messages($hesk_error_buffer,'new_ticket.php'); | |||
} | |||
if ($hesk_settings['attachments']['use'] && !empty($attachments)) | |||
{ | |||
foreach ($attachments as $myatt) | |||
{ | |||
hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."attachments` (`ticket_id`,`saved_name`,`real_name`,`size`) VALUES ('".hesk_dbEscape($tmpvar['trackid'])."','".hesk_dbEscape($myatt['saved_name'])."','".hesk_dbEscape($myatt['real_name'])."','".intval($myatt['size'])."')"); | |||
$tmpvar['attachments'] .= hesk_dbInsertID() . '#' . $myatt['real_name'] .','; | |||
} | |||
} | |||
$tmpvar['message']=hesk_makeURL($tmpvar['message']); | |||
$tmpvar['message']=nl2br($tmpvar['message']); | |||
// Insert ticket to database | |||
$ticket = hesk_newTicket($tmpvar); | |||
// Notify the customer about the ticket? | |||
if ($notify) | |||
{ | |||
hesk_notifyCustomer(); | |||
} | |||
// If ticket is assigned to someone notify them? | |||
if ($ticket['owner'] && $ticket['owner'] != intval($_SESSION['id'])) | |||
{ | |||
// If we don't have info from auto-assign get it from database | |||
if ( ! isset($autoassign_owner['email']) ) | |||
{ | |||
hesk_notifyAssignedStaff(false, 'ticket_assigned_to_you'); | |||
} | |||
else | |||
{ | |||
hesk_notifyAssignedStaff($autoassign_owner, 'ticket_assigned_to_you'); | |||
} | |||
} | |||
// Ticket unassigned, notify everyone that selected to be notified about unassigned tickets | |||
elseif ( ! $ticket['owner']) | |||
{ | |||
hesk_notifyStaff('new_ticket_staff', " `id` != ".intval($_SESSION['id'])." AND `notify_new_unassigned` = '1' "); | |||
} | |||
// Unset temporary variables | |||
unset($tmpvar); | |||
hesk_cleanSessionVars('tmpvar'); | |||
hesk_cleanSessionVars('as_name'); | |||
hesk_cleanSessionVars('as_email'); | |||
hesk_cleanSessionVars('as_category'); | |||
hesk_cleanSessionVars('as_priority'); | |||
hesk_cleanSessionVars('as_subject'); | |||
hesk_cleanSessionVars('as_message'); | |||
hesk_cleanSessionVars('as_owner'); | |||
hesk_cleanSessionVars('as_notify'); | |||
hesk_cleanSessionVars('as_show'); | |||
foreach ($hesk_settings['custom_fields'] as $k=>$v) | |||
{ | |||
if ($v['use']) | |||
{ | |||
hesk_cleanSessionVars("as_$k"); | |||
} | |||
} | |||
// If ticket has been assigned to the person submitting it lets show a message saying so | |||
if ($ticket['owner'] && $ticket['owner'] == intval($_SESSION['id'])) | |||
{ | |||
$hesklang['new_ticket_submitted'] .= '<br /> <br /> | |||
<span class="glyphicon glyphicon-comment"></span> <b>' . (isset($autoassign_owner) ? $hesklang['taasy'] : $hesklang['tasy']) . '</b>'; | |||
} | |||
// Show the ticket or just the success message | |||
if ($show) | |||
{ | |||
hesk_process_messages($hesklang['new_ticket_submitted'],'admin_ticket.php?track=' . $ticket['trackid'] . '&Refresh=' . mt_rand(10000,99999), 'SUCCESS'); | |||
} | |||
else | |||
{ | |||
hesk_process_messages($hesklang['new_ticket_submitted'].'. <a href="admin_ticket.php?track=' . $ticket['trackid'] . '&Refresh=' . mt_rand(10000,99999) . '">' . $hesklang['view_ticket'] . '</a>', 'new_ticket.php', 'SUCCESS'); | |||
} | |||
?> |
@@ -0,0 +1,418 @@ | |||
<?php | |||
/******************************************************************************* | |||
* Title: Help Desk Software HESK | |||
* Version: 2.5.3 from 16th March 2014 | |||
* Author: Klemen Stirn | |||
* Website: http://www.hesk.com | |||
******************************************************************************** | |||
* COPYRIGHT AND TRADEMARK NOTICE | |||
* Copyright 2005-2013 Klemen Stirn. All Rights Reserved. | |||
* HESK is a registered trademark of Klemen Stirn. | |||
* The HESK may be used and modified free of charge by anyone | |||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT. | |||
* By using this code you agree to indemnify Klemen Stirn from any | |||
* liability that might arise from it's use. | |||
* Selling the code for this program, in part or full, without prior | |||
* written consent is expressly forbidden. | |||
* Using this code, in part or full, to create derivate work, | |||
* new scripts or products is expressly forbidden. Obtain permission | |||
* before redistributing this software over the Internet or in | |||
* any other medium. In all cases copyright and header must remain intact. | |||
* This Copyright is in full effect in any country that has International | |||
* Trade Agreements with the United States of America or | |||
* with the European Union. | |||
* Removing any of the copyright notices without purchasing a license | |||
* is expressly forbidden. To remove HESK copyright notice you must purchase | |||
* a license for this script. For more information on how to obtain | |||
* a license please visit the page below: | |||
* https://www.hesk.com/buy.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(); | |||
/* Check permissions for this feature */ | |||
hesk_checkPermission('can_view_tickets'); | |||
hesk_checkPermission('can_edit_tickets'); | |||
/* Ticket ID */ | |||
$trackingID = hesk_cleanID() or die($hesklang['int_error'].': '.$hesklang['no_trackID']); | |||
$is_reply = 0; | |||
$tmpvar = array(); | |||
/* Get ticket info */ | |||
$result = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `trackid`='".hesk_dbEscape($trackingID)."' LIMIT 1"); | |||
if (hesk_dbNumRows($result) != 1) | |||
{ | |||
hesk_error($hesklang['ticket_not_found']); | |||
} | |||
$ticket = hesk_dbFetchAssoc($result); | |||
// Demo mode | |||
if ( defined('HESK_DEMO') ) | |||
{ | |||
$ticket['email'] = 'hidden@demo.com'; | |||
} | |||
/* Is this user allowed to view tickets inside this category? */ | |||
hesk_okCategory($ticket['category']); | |||
if ( hesk_isREQUEST('reply') ) | |||
{ | |||
$tmpvar['id'] = intval( hesk_REQUEST('reply') ) or die($hesklang['id_not_valid']); | |||
$result = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `id`='{$tmpvar['id']}' AND `replyto`='".intval($ticket['id'])."' LIMIT 1"); | |||
if (hesk_dbNumRows($result) != 1) | |||
{ | |||
hesk_error($hesklang['id_not_valid']); | |||
} | |||
$reply = hesk_dbFetchAssoc($result); | |||
$ticket['message'] = $reply['message']; | |||
$is_reply = 1; | |||
} | |||
if (isset($_POST['save'])) | |||
{ | |||
/* A security check */ | |||
hesk_token_check('POST'); | |||
$hesk_error_buffer = array(); | |||
if ($is_reply) | |||
{ | |||
$tmpvar['message'] = hesk_input( hesk_POST('message') ) or $hesk_error_buffer[]=$hesklang['enter_message']; | |||
if (count($hesk_error_buffer)) | |||
{ | |||
$myerror = '<ul>'; | |||
foreach ($hesk_error_buffer as $error) | |||
{ | |||
$myerror .= "<li>$error</li>\n"; | |||
} | |||
$myerror .= '</ul>'; | |||
hesk_error($myerror); | |||
} | |||
$tmpvar['message'] = hesk_makeURL($tmpvar['message']); | |||
$tmpvar['message'] = nl2br($tmpvar['message']); | |||
hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` SET `message`='".hesk_dbEscape($tmpvar['message'])."' WHERE `id`='".intval($tmpvar['id'])."' AND `replyto`='".intval($ticket['id'])."' LIMIT 1"); | |||
} | |||
else | |||
{ | |||
$tmpvar['name'] = hesk_input( hesk_POST('name') ) or $hesk_error_buffer[]=$hesklang['enter_your_name']; | |||
$tmpvar['email'] = hesk_validateEmail( hesk_POST('email'), 'ERR', 0) or $hesk_error_buffer[]=$hesklang['enter_valid_email']; | |||
$tmpvar['subject'] = hesk_input( hesk_POST('subject') ) or $hesk_error_buffer[]=$hesklang['enter_ticket_subject']; | |||
$tmpvar['message'] = hesk_input( hesk_POST('message') ) or $hesk_error_buffer[]=$hesklang['enter_message']; | |||
// Demo mode | |||
if ( defined('HESK_DEMO') ) | |||
{ | |||
$tmpvar['email'] = 'hidden@demo.com'; | |||
} | |||
if (count($hesk_error_buffer)) | |||
{ | |||
$myerror = '<ul>'; | |||
foreach ($hesk_error_buffer as $error) | |||
{ | |||
$myerror .= "<li>$error</li>\n"; | |||
} | |||
$myerror .= '</ul>'; | |||
hesk_error($myerror); | |||
} | |||
$tmpvar['message'] = hesk_makeURL($tmpvar['message']); | |||
$tmpvar['message'] = nl2br($tmpvar['message']); | |||
foreach ($hesk_settings['custom_fields'] as $k=>$v) | |||
{ | |||
if ($v['use'] && isset($_POST[$k])) | |||
{ | |||
if (is_array($_POST[$k])) | |||
{ | |||
$tmpvar[$k]=''; | |||
foreach ($_POST[$k] as $myCB) | |||
{ | |||
$tmpvar[$k] .= ( is_array($myCB) ? '' : hesk_input($myCB) ) . '<br />'; | |||
} | |||
$tmpvar[$k]=substr($tmpvar[$k],0,-6); | |||
} | |||
else | |||
{ | |||
$tmpvar[$k]=hesk_makeURL(nl2br(hesk_input($_POST[$k]))); | |||
} | |||
} | |||
else | |||
{ | |||
$tmpvar[$k] = ''; | |||
} | |||
} | |||
hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` SET | |||
`name`='".hesk_dbEscape($tmpvar['name'])."', | |||
`email`='".hesk_dbEscape($tmpvar['email'])."', | |||
`subject`='".hesk_dbEscape($tmpvar['subject'])."', | |||
`message`='".hesk_dbEscape($tmpvar['message'])."', | |||
`custom1`='".hesk_dbEscape($tmpvar['custom1'])."', | |||
`custom2`='".hesk_dbEscape($tmpvar['custom2'])."', | |||
`custom3`='".hesk_dbEscape($tmpvar['custom3'])."', | |||
`custom4`='".hesk_dbEscape($tmpvar['custom4'])."', | |||
`custom5`='".hesk_dbEscape($tmpvar['custom5'])."', | |||
`custom6`='".hesk_dbEscape($tmpvar['custom6'])."', | |||
`custom7`='".hesk_dbEscape($tmpvar['custom7'])."', | |||
`custom8`='".hesk_dbEscape($tmpvar['custom8'])."', | |||
`custom9`='".hesk_dbEscape($tmpvar['custom9'])."', | |||
`custom10`='".hesk_dbEscape($tmpvar['custom10'])."', | |||
`custom11`='".hesk_dbEscape($tmpvar['custom11'])."', | |||
`custom12`='".hesk_dbEscape($tmpvar['custom12'])."', | |||
`custom13`='".hesk_dbEscape($tmpvar['custom13'])."', | |||
`custom14`='".hesk_dbEscape($tmpvar['custom14'])."', | |||
`custom15`='".hesk_dbEscape($tmpvar['custom15'])."', | |||
`custom16`='".hesk_dbEscape($tmpvar['custom16'])."', | |||
`custom17`='".hesk_dbEscape($tmpvar['custom17'])."', | |||
`custom18`='".hesk_dbEscape($tmpvar['custom18'])."', | |||
`custom19`='".hesk_dbEscape($tmpvar['custom19'])."', | |||
`custom20`='".hesk_dbEscape($tmpvar['custom20'])."' | |||
WHERE `id`='".intval($ticket['id'])."' LIMIT 1"); | |||
} | |||
unset($tmpvar); | |||
hesk_cleanSessionVars('tmpvar'); | |||
hesk_process_messages($hesklang['edt2'],'admin_ticket.php?track='.$trackingID.'&Refresh='.mt_rand(10000,99999),'SUCCESS'); | |||
} | |||
$ticket['message'] = hesk_msgToPlain($ticket['message'],0,0); | |||
/* Print header */ | |||
require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); | |||
/* Print admin navigation */ | |||
require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); | |||
?> | |||
<ol class="breadcrumb"> | |||
<li><a href="admin_ticket.php?track=<?php echo $trackingID; ?>&Refresh=<?php echo mt_rand(10000,99999); ?>"><?php echo $hesklang['ticket'].' '.$trackingID; ?></a></li> | |||
<li class="active"><?php echo $hesklang['edtt']; ?></li> | |||
</ol> | |||
<div class="row"> | |||
<div class="col-md-8 col-md-offset-2"> | |||
<h3><?php echo $hesklang['edtt']; ?></h3> | |||
<div class="footerWithBorder blankSpace"></div> | |||
<form role="form" class="form-horizontal" method="post" action="edit_post.php" name="form1"> | |||
<?php | |||
/* If it's not a reply edit all the fields */ | |||
if (!$is_reply) | |||
{ | |||
?> | |||
<div class="form-group"> | |||
<label for="subject" class="col-sm-3 control-label"><?php echo $hesklang['subject']; ?>:</label> | |||
<div class="col-sm-9"> | |||
<input class="form-control" type="text" name="subject" size="40" maxlength="40" value="<?php echo $ticket['subject'];?>" placeholder="<?php echo $hesklang['subject']; ?>" /> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="name" class="col-sm-3 control-label"><?php echo $hesklang['name']; ?>:</label> | |||
<div class="col-sm-9"> | |||
<input class="form-control" type="text" name="name" size="40" maxlength="30" value="<?php echo $ticket['name'];?>" placeholder="<?php echo $hesklang['name']; ?>" /> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="email" class="col-sm-3 control-label"><?php echo $hesklang['email']; ?>:</label> | |||
<div class="col-sm-9"> | |||
<input class="form-control" type="text" name="email" size="40" maxlength="255" value="<?php echo $ticket['email'];?>" placeholder="<?php echo $hesklang['email']; ?>" /> | |||
</div> | |||
</div> | |||
<?php | |||
foreach ($hesk_settings['custom_fields'] as $k=>$v) | |||
{ | |||
if ($v['use']) | |||
{ | |||
$k_value = $ticket[$k]; | |||
if ($v['type'] == 'checkbox') | |||
{ | |||
$k_value = explode('<br />',$k_value); | |||
} | |||
switch ($v['type']) | |||
{ | |||
/* Radio box */ | |||
case 'radio': | |||
echo ' | |||
<div class="form-group"> | |||
<label for="'.$v['name'].'" class="col-sm-3 control-label">'.$v['name'].': </label> | |||
<div class="col-sm-9">'; | |||
$options = explode('#HESK#',$v['value']); | |||
foreach ($options as $option) | |||
{ | |||
if (strlen($k_value) == 0 || $k_value == $option) | |||
{ | |||
$k_value = $option; | |||
$checked = 'checked="checked"'; | |||
} | |||
else | |||
{ | |||
$checked = ''; | |||
} | |||
echo '<div class="radio"><label><input type="radio" name="'.$k.'" value="'.$option.'" '.$checked.' /> '.$option.'</label></div>'; | |||
} | |||
echo '</div> | |||
</div> | |||
'; | |||
break; | |||
/* Select drop-down box */ | |||
case 'select': | |||
echo ' | |||
<div class="form-group"> | |||
<label for="'.$v['name'].'" class="col-sm-3 control-label">'.$v['name'].': </label> | |||
<div class="col-sm-9"><select class="form-control" name="'.$k.'">'; | |||
$options = explode('#HESK#',$v['value']); | |||
foreach ($options as $option) | |||
{ | |||
if (strlen($k_value) == 0 || $k_value == $option) | |||
{ | |||
$k_value = $option; | |||
$selected = 'selected="selected"'; | |||
} | |||
else | |||
{ | |||
$selected = ''; | |||
} | |||
echo '<option '.$selected.'>'.$option.'</option>'; | |||
} | |||
echo '</select></div> | |||
</div> | |||
'; | |||
break; | |||
/* Checkbox */ | |||
case 'checkbox': | |||
echo ' | |||
<div class="form-group"> | |||
<label for="'.$v['name'].'" class="col-sm-3 control-label">'.$v['name'].': </label> | |||
<div class="col-sm-9">'; | |||
$options = explode('#HESK#',$v['value']); | |||
foreach ($options as $option) | |||
{ | |||
if (in_array($option,$k_value)) | |||
{ | |||
$checked = 'checked="checked"'; | |||
} | |||
else | |||
{ | |||
$checked = ''; | |||
} | |||
echo '<div class="checkbox"><label><input type="checkbox" name="'.$k.'[]" value="'.$option.'" '.$checked.' /> '.$option.'</label></div>'; | |||
} | |||
echo '</div> | |||
</div> | |||
'; | |||
break; | |||
/* Large text box */ | |||
case 'textarea': | |||
$size = explode('#',$v['value']); | |||
$size[0] = empty($size[0]) ? 5 : intval($size[0]); | |||
$size[1] = empty($size[1]) ? 30 : intval($size[1]); | |||
$k_value = hesk_msgToPlain($k_value,0,0); | |||
echo ' | |||
<div class="form-group"> | |||
<label for="'.$v['name'].'" class="col-sm-3 control-label">'.$v['name'].': </label> | |||
<div class="col-sm-9"> | |||
<textarea class="form-control" name="'.$k.'" rows="'.$size[0].'" placeholder="'.$v['name'].'" cols="'.$size[1].'">'.$k_value.'</textarea> | |||
</div> | |||
</div>'; | |||
break; | |||
/* Default text input */ | |||
default: | |||
if (strlen($k_value) != 0) | |||
{ | |||
$k_value = hesk_msgToPlain($k_value,0,0); | |||
$v['value'] = $k_value; | |||
} | |||
echo ' | |||
<div class="form-group"> | |||
<label for="'.$v['name'].'" class="col-sm-3 control-label">'.$v['name'].': </label> | |||
<div class="col-sm-9"> | |||
<input type="text" class="form-control" placeholder="'.$v['name'].'" name="'.$k.'" size="40" maxlength="'.$v['maxlen'].'" value="'.$v['value'].'" /> | |||
</div> | |||
</div> | |||
'; | |||
} | |||
} | |||
} | |||
?> | |||
<?php } ?> | |||
<div class="form-group"> | |||
<label for="message" class="col-sm-3 control-label"><?php echo $hesklang['message']; ?>:</label> | |||
<div class="col-sm-9"> | |||
<textarea class="form-control" name="message" rows="12" placeholder="<?php echo $hesklang['message']; ?>" cols="60"><?php echo $ticket['message']; ?></textarea> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<input type="hidden" name="save" value="1" /><input type="hidden" name="track" value="<?php echo $trackingID; ?>" /> | |||
<input type="hidden" name="token" value="<?php hesk_token_echo(); ?>" /> | |||
<?php | |||
if ($is_reply) | |||
{ | |||
?> | |||
<input type="hidden" name="reply" value="<?php echo $tmpvar['id']; ?>" /> | |||
<?php | |||
} | |||
?> | |||
</div> | |||
<div class="form-group" style="text-align: center"> | |||
<input type="submit" value="<?php echo $hesklang['save_changes']; ?>" class="btn btn-default" /> | |||
<a class="btn btn-default" href="javascript:history.go(-1)"><?php echo $hesklang['back']; ?></a> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<p style="text-align:center"></p> | |||
<p> </p> | |||
<?php | |||
require_once(HESK_PATH . 'inc/footer.inc.php'); | |||
exit(); | |||
?> |
@@ -0,0 +1,934 @@ | |||
<?php | |||
/******************************************************************************* | |||
* Title: Help Desk Software HESK | |||
* Version: 2.5.3 from 16th March 2014 | |||
* Author: Klemen Stirn | |||
* Website: http://www.hesk.com | |||
******************************************************************************** | |||
* COPYRIGHT AND TRADEMARK NOTICE | |||
* Copyright 2005-2013 Klemen Stirn. All Rights Reserved. | |||
* HESK is a registered trademark of Klemen Stirn. | |||
* The HESK may be used and modified free of charge by anyone | |||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT. | |||
* By using this code you agree to indemnify Klemen Stirn from any | |||
* liability that might arise from it's use. | |||
* Selling the code for this program, in part or full, without prior | |||
* written consent is expressly forbidden. | |||
* Using this code, in part or full, to create derivate work, | |||
* new scripts or products is expressly forbidden. Obtain permission | |||
* before redistributing this software over the Internet or in | |||
* any other medium. In all cases copyright and header must remain intact. | |||
* This Copyright is in full effect in any country that has International | |||
* Trade Agreements with the United States of America or | |||
* with the European Union. | |||
* Removing any of the copyright notices without purchasing a license | |||
* is expressly forbidden. To remove HESK copyright notice you must purchase | |||
* a license for this script. For more information on how to obtain | |||
* a license please visit the page below: | |||
* https://www.hesk.com/buy.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/reporting_functions.inc.php'); | |||
hesk_load_database_functions(); | |||
hesk_session_start(); | |||
hesk_dbConnect(); | |||
hesk_isLoggedIn(); | |||
// Check permissions for this feature | |||
hesk_checkPermission('can_export'); | |||
// Set default values | |||
define('CALENDAR',1); | |||
define('MAIN_PAGE',1); | |||
define('LOAD_TABS',1); | |||
$selected = array( | |||
'w' => array(0=>'',1=>''), | |||
'time' => array(1=>'',2=>'',3=>'',4=>'',5=>'',6=>'',7=>'',8=>'',9=>'',10=>'',11=>'',12=>''), | |||
); | |||
$is_all_time = 0; | |||
// Default this month to date | |||
$date_from = date('Y-m-d',mktime(0, 0, 0, date("m"), 1, date("Y"))); | |||
$date_to = date('Y-m-d'); | |||
$input_datefrom = date('m/d/Y', strtotime('last month')); | |||
$input_dateto = date('m/d/Y'); | |||
/* Date */ | |||
if (!empty($_GET['w'])) | |||
{ | |||
$df = preg_replace('/[^0-9]/','', hesk_GET('datefrom') ); | |||
if (strlen($df) == 8) | |||
{ | |||
$date_from = substr($df,4,4) . '-' . substr($df,0,2) . '-' . substr($df,2,2); | |||
$input_datefrom = substr($df,0,2) . '/' . substr($df,2,2) . '/' . substr($df,4,4); | |||
} | |||
else | |||
{ | |||
$date_from = date('Y-m-d', strtotime('last month') ); | |||
} | |||
$dt = preg_replace('/[^0-9]/','', hesk_GET('dateto') ); | |||
if (strlen($dt) == 8) | |||
{ | |||
$date_to = substr($dt,4,4) . '-' . substr($dt,0,2) . '-' . substr($dt,2,2); | |||
$input_dateto = substr($dt,0,2) . '/' . substr($dt,2,2) . '/' . substr($dt,4,4); | |||
} | |||
else | |||
{ | |||
$date_to = date('Y-m-d'); | |||
} | |||
if ($date_from > $date_to) | |||
{ | |||
$tmp = $date_from; | |||
$tmp2 = $input_datefrom; | |||
$date_from = $date_to; | |||
$input_datefrom = $input_dateto; | |||
$date_to = $tmp; | |||
$input_dateto = $tmp2; | |||
$note_buffer = $hesklang['datetofrom']; | |||
} | |||
if ($date_to > date('Y-m-d')) | |||
{ | |||
$date_to = date('Y-m-d'); | |||
$input_dateto = date('m/d/Y'); | |||
} | |||
$selected['w'][1]='checked="checked"'; | |||
$selected['time'][3]='selected="selected"'; | |||
} | |||
else | |||
{ | |||
$selected['w'][0]='checked="checked"'; | |||
$_GET['time'] = intval( hesk_GET('time', 3) ); | |||
switch ($_GET['time']) | |||
{ | |||
case 1: | |||
/* Today */ | |||
$date_from = date('Y-m-d'); | |||
$date_to = $date_from; | |||
$selected['time'][1]='selected="selected"'; | |||
$is_all_time = 1; | |||
break; | |||
case 2: | |||
/* Yesterday */ | |||
$date_from = date('Y-m-d',mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); | |||
$date_to = $date_from; | |||
$selected['time'][2]='selected="selected"'; | |||
$is_all_time = 1; | |||
break; | |||
case 4: | |||
/* Last month */ | |||
$date_from = date('Y-m-d',mktime(0, 0, 0, date("m")-1, 1, date("Y"))); | |||
$date_to = date('Y-m-d',mktime(0, 0, 0, date("m"), 0, date("Y"))); | |||
$selected['time'][4]='selected="selected"'; | |||
break; | |||
case 5: | |||
/* Last 30 days */ | |||
$date_from = date('Y-m-d',mktime(0, 0, 0, date("m")-1, date("d"), date("Y"))); | |||
$date_to = date('Y-m-d'); | |||
$selected['time'][5]='selected="selected"'; | |||
break; | |||
case 6: | |||
/* This week */ | |||
list($date_from,$date_to)=dateweek(0); | |||
$date_to = date('Y-m-d'); | |||
$selected['time'][6]='selected="selected"'; | |||
break; | |||
case 7: | |||
/* Last week */ | |||
list($date_from,$date_to)=dateweek(-1); | |||
$selected['time'][7]='selected="selected"'; | |||
break; | |||
case 8: | |||
/* This business week */ | |||
list($date_from,$date_to)=dateweek(0,1); | |||
$date_to = date('Y-m-d'); | |||
$selected['time'][8]='selected="selected"'; | |||
break; | |||
case 9: | |||
/* Last business week */ | |||
list($date_from,$date_to)=dateweek(-1,1); | |||
$selected['time'][9]='selected="selected"'; | |||
break; | |||
case 10: | |||
/* This year */ | |||
$date_from = date('Y').'-01-01'; | |||
$date_to = date('Y-m-d'); | |||
$selected['time'][10]='selected="selected"'; | |||
break; | |||
case 11: | |||
/* Last year */ | |||
$date_from = date('Y')-1 . '-01-01'; | |||
$date_to = date('Y')-1 . '-12-31'; | |||
$selected['time'][11]='selected="selected"'; | |||
break; | |||
case 12: | |||
/* All time */ | |||
$date_from = hesk_getOldestDate(); | |||
$date_to = date('Y-m-d'); | |||
$selected['time'][12]='selected="selected"'; | |||
$is_all_time = 1; | |||
break; | |||
default: | |||
$_GET['time'] = 3; | |||
$selected['time'][3]='selected="selected"'; | |||
} | |||
} | |||
unset($tmp); | |||
// Start SQL statement for selecting tickets | |||
$sql = "SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE "; | |||
// Some default settings | |||
$archive = array(1=>0,2=>0); | |||
$s_my = array(1=>1,2=>1); | |||
$s_ot = array(1=>1,2=>1); | |||
$s_un = array(1=>1,2=>1); | |||
// --> TICKET CATEGORY | |||
$category = intval( hesk_GET('category', 0) ); | |||
// Make sure user has access to this category | |||
if ($category && hesk_okCategory($category, 0) ) | |||
{ | |||
$sql .= " `category`='{$category}' "; | |||
} | |||
// No category selected, show only allowed categories | |||
else | |||
{ | |||
$sql .= hesk_myCategories(); | |||
} | |||
// Show only tagged tickets? | |||
if ( ! empty($_GET['archive']) ) | |||
{ | |||
$archive[1]=1; | |||
$sql .= " AND `archive`='1' "; | |||
} | |||
// Ticket owner preferences | |||
$fid = 1; | |||
require(HESK_PATH . 'inc/assignment_search.inc.php'); | |||
// --> TICKET STATUS | |||
$possible_status = array( | |||
0 => 'NEW', | |||
1 => 'WAITING REPLY', | |||
2 => 'REPLIED', | |||
3 => 'RESOLVED (CLOSED)', | |||
4 => 'IN PROGRESS', | |||
5 => 'ON HOLD', | |||
); | |||
$status = $possible_status; | |||
foreach ($status as $k => $v) | |||
{ | |||
if (empty($_GET['s'.$k])) | |||
{ | |||
unset($status[$k]); | |||
} | |||
} | |||
// How many statuses are we pulling out of the database? | |||
$tmp = count($status); | |||
// Do we need to search by status? | |||
if ( $tmp < 6 ) | |||
{ | |||
// If no statuses selected, show all | |||
if ($tmp == 0) | |||
{ | |||
$status = $possible_status; | |||
} | |||
else | |||
{ | |||
// Add to the SQL | |||
$sql .= " AND `status` IN ('" . implode("','", array_keys($status) ) . "') "; | |||
} | |||
} | |||
// --> TICKET PRIORITY | |||
$possible_priority = array( | |||
0 => 'CRITICAL', | |||
1 => 'HIGH', | |||
2 => 'MEDIUM', | |||
3 => 'LOW', | |||
); | |||
$priority = $possible_priority; | |||
foreach ($priority as $k => $v) | |||
{ | |||
if (empty($_GET['p'.$k])) | |||
{ | |||
unset($priority[$k]); | |||
} | |||
} | |||
// How many priorities are we pulling out of the database? | |||
$tmp = count($priority); | |||
// Create the SQL based on the number of priorities we need | |||
if ($tmp == 0 || $tmp == 4) | |||
{ | |||
// Nothing or all selected, no need to modify the SQL code | |||
$priority = $possible_priority; | |||
} | |||
else | |||
{ | |||
// A custom selection of priorities | |||
$sql .= " AND `priority` IN ('" . implode("','", array_keys($priority) ) . "') "; | |||
} | |||
// Prepare variables used in search and forms | |||
require_once(HESK_PATH . 'inc/prepare_ticket_export.inc.php'); | |||
//////////////////////////////////////////////////////////////////////////////// | |||
// Can view tickets that are unassigned or assigned to others? | |||
$can_view_ass_others = hesk_checkPermission('can_view_ass_others',0); | |||
$can_view_unassigned = hesk_checkPermission('can_view_unassigned',0); | |||
// Category options | |||
$category_options = ''; | |||
$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); | |||
$row['name'] = (strlen($row['name']) > 50) ? substr($row['name'],0,50) . '...' : $row['name']; | |||
$cat_selected = ($row['id'] == $category) ? 'selected="selected"' : ''; | |||
$category_options .= '<option value="'.$row['id'].'" '.$cat_selected.'>'.$row['name'].'</option>'; | |||
} | |||
// Generate export file | |||
if (isset($_GET['w'])) | |||
{ | |||
// 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 `id` ASC"); | |||
while ($row=hesk_dbFetchAssoc($result)) | |||
{ | |||
$admins[$row['id']]=$row['name']; | |||
} | |||
// This will be the export directory | |||
$export_dir = HESK_PATH.$hesk_settings['attach_dir'].'/export/'; | |||
// 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) ) ) | |||
{ | |||
// Cleanup old files | |||
$files = glob($export_dir.'*', GLOB_NOSORT); | |||
if ( is_array($files) && count($files) ) | |||
{ | |||
foreach ($files as $file) | |||
{ | |||
hesk_unlink($file, 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 | |||
$flush_me = '<br /><br />'; | |||
$flush_me .= hesk_date() . " | {$hesklang['inite']} "; | |||
if ($date_from == $date_to) | |||
{ | |||
$flush_me .= "(" . hesk_dateToString($date_from,0) . ")<br />\n"; | |||
} | |||
else | |||
{ | |||
$flush_me .= "(" . hesk_dateToString($date_from,0) . " - " . hesk_dateToString($date_to,0) . ")<br />\n"; | |||
} | |||
// 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="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)) | |||
{ | |||
switch ($ticket['status']) | |||
{ | |||
case 0: | |||
$ticket['status']=$hesklang['open']; | |||
break; | |||
case 1: | |||
$ticket['status']=$hesklang['wait_reply']; | |||
break; | |||
case 2: | |||
$ticket['status']=$hesklang['replied']; | |||
break; | |||
case 4: | |||
$ticket['status']=$hesklang['in_progress']; | |||
break; | |||
case 5: | |||
$ticket['status']=$hesklang['on_hold']; | |||
break; | |||
default: | |||
$ticket['status']=$hesklang['closed']; | |||
} | |||
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); | |||
$ticket['subject'] = hesk_msgToPlain($ticket['subject'], 1); | |||
$ticket['owner'] = isset($admins[$ticket['owner']]) ? $admins[$ticket['owner']] : ''; | |||
$ticket['dt'] = date("Y-m-d\TH:i:s\.000", strtotime($ticket['dt'])); | |||
$ticket['lastchange'] = date("Y-m-d\TH:i:s\.000", strtotime($ticket['lastchange'])); | |||
// 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">'.$ticket['dt'].'</Data></Cell> | |||
<Cell ss:StyleID="s62"><Data ss:Type="DateTime">'.$ticket['lastchange'].'</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['.$my_cat[$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']) | |||
{ | |||
$tmp .= '<Cell><Data ss:Type="String"><![CDATA['.hesk_msgToPlain($ticket[$k], 1).']]></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 | |||
// 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 />"; | |||
$flush_me .= '<a href="' . $save_to_zip . '">' . $hesklang['ch2d'] . "</a>\n"; | |||
} | |||
// No tickets exported, cleanup | |||
else | |||
{ | |||
hesk_unlink($save_to); | |||
} | |||
} | |||
/* 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="enclosingDashboard" style="padding-top: 20px"> | |||
<div class="row"> | |||
<div align="left" class="col-md-4"> | |||
<div class="moreToLeft"> | |||
<ul class="nav nav-tabs"> | |||
<?php | |||
if ( hesk_checkPermission('can_run_reports',0) ) | |||
{ | |||
?> | |||
<li><a href="reports.php"><?php echo $hesklang['reports_tab']; ?></a></li> | |||
<?php } ?> | |||
<li class="active"><a href="#" onclick="return false;"><?php echo $hesklang['export']; ?></a></li> | |||
</ul> | |||
<div class="summaryList"> | |||
<div class="viewTicketSidebar"> | |||
<p><?php echo $hesklang['export_intro']; ?></p> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="col-md-8"> | |||
<?php | |||
/* This will handle error, success and notice messages */ | |||
hesk_handle_messages(); | |||
// If an export was generated, show the link to download | |||
if (isset($flush_me)) | |||
{ | |||
if ($tickets_exported > 0) | |||
{ | |||
hesk_show_success($flush_me); | |||
} | |||
else | |||
{ | |||
hesk_show_notice($hesklang['n2ex']); | |||
} | |||
} | |||
?> | |||
<h3><?php echo $hesklang['export']; ?></h3> | |||
<div class="footerWithBorder blankSpace"></div> | |||
<form name="showt" action="export.php" method="get" class="form-horizontal" role="form"> | |||
<div class="form-group"> | |||
<label for="time" class="control-label col-sm-2"><?php echo $hesklang['dtrg']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<!-- START DATE --> | |||
<input type="radio" name="w" value="0" id="w0" <?php echo $selected['w'][0]; ?> /> | |||
<select name="time" onclick="document.getElementById('w0').checked = true" onfocus="document.getElementById('w0').checked = true" style="margin-top:5px;margin-bottom:5px;"> | |||
<option value="1" <?php echo $selected['time'][1]; ?>><?php echo $hesklang['r1']; ?> (<?php echo $hesklang['d'.date('w')]; ?>)</option> | |||
<option value="2" <?php echo $selected['time'][2]; ?>><?php echo $hesklang['r2']; ?> (<?php echo $hesklang['d'.date('w',mktime(0, 0, 0, date('m'), date('d')-1, date('Y')))]; ?>)</option> | |||
<option value="3" <?php echo $selected['time'][3]; ?>><?php echo $hesklang['r3']; ?> (<?php echo $hesklang['m'.date('n')]; ?>)</option> | |||
<option value="4" <?php echo $selected['time'][4]; ?>><?php echo $hesklang['r4']; ?> (<?php echo $hesklang['m'.date('n',mktime(0, 0, 0, date('m')-1, date('d'), date('Y')))]; ?>)</option> | |||
<option value="5" <?php echo $selected['time'][5]; ?>><?php echo $hesklang['r5']; ?></option> | |||
<option value="6" <?php echo $selected['time'][6]; ?>><?php echo $hesklang['r6']; ?></option> | |||
<option value="7" <?php echo $selected['time'][7]; ?>><?php echo $hesklang['r7']; ?></option> | |||
<option value="8" <?php echo $selected['time'][8]; ?>><?php echo $hesklang['r8']; ?></option> | |||
<option value="9" <?php echo $selected['time'][9]; ?>><?php echo $hesklang['r9']; ?></option> | |||
<option value="10" <?php echo $selected['time'][10]; ?>><?php echo $hesklang['r10']; ?> (<?php echo date('Y'); ?>)</option> | |||
<option value="11" <?php echo $selected['time'][11]; ?>><?php echo $hesklang['r11']; ?> (<?php echo date('Y',mktime(0, 0, 0, date('m'), date('d'), date('Y')-1)); ?>)</option> | |||
<option value="12" <?php echo $selected['time'][12]; ?>><?php echo $hesklang['r12']; ?></option> | |||
</select> | |||
<br /> | |||
<input type="radio" name="w" value="1" id="w1" <?php echo $selected['w'][1]; ?> /> | |||
<?php echo $hesklang['from']; ?> <input type="text" name="datefrom" value="<?php echo $input_datefrom; ?>" id="datefrom" class="tcal" size="10" onclick="document.getElementById('w1').checked = true" onfocus="document.getElementById('w1').checked = true;this.focus;" /> | |||
<?php echo $hesklang['to']; ?> <input type="text" name="dateto" value="<?php echo $input_dateto; ?>" id="dateto" class="tcal" size="10" onclick="document.getElementById('w1').checked = true" onfocus="document.getElementById('w1').checked = true; this.focus;" /> | |||
<!-- END DATE --> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="status" class="control-label col-sm-2"><?php echo $hesklang['status']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s0" value="1" <?php if (isset($status[0])) {echo 'checked="checked"';} ?> /> <span class="open"><?php echo $hesklang['open']; ?></span></label> | |||
</div> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s2" value="1" <?php if (isset($status[2])) {echo 'checked="checked"';} ?> /> <span class="replied"><?php echo $hesklang['replied']; ?></span></label> | |||
</div> | |||
</div> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s4" value="1" <?php if (isset($status[4])) {echo 'checked="checked"';} ?> /> <span class="inprogress"><?php echo $hesklang['in_progress']; ?></span></label> | |||
</div> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s1" value="1" <?php if (isset($status[1])) {echo 'checked="checked"';} ?> /> <span class="waitingreply"><?php echo $hesklang['wait_reply']; ?></span></label> | |||
</div> | |||
</div> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s3" value="1" <?php if (isset($status[3])) {echo 'checked="checked"';} ?> /> <span class="resolved"><?php echo $hesklang['closed']; ?></span></label> | |||
</div> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s5" value="1" <?php if (isset($status[5])) {echo 'checked="checked"';} ?> /> <span class="onhold"><?php echo $hesklang['on_hold']; ?></span></label> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="priority" class="col-sm-2 control-label"><?php echo $hesklang['priority']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="p0" value="1" <?php if (isset($priority[0])) {echo 'checked="checked"';} ?> /> <span class="critical"><?php echo $hesklang['critical']; ?></span></label> | |||
</div> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="p1" value="1" <?php if (isset($priority[1])) {echo 'checked="checked"';} ?> /> <span class="important"><?php echo $hesklang['high']; ?></span></label> | |||
</div> | |||
</div> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="p2" value="1" <?php if (isset($priority[2])) {echo 'checked="checked"';} ?> /> <span class="medium"><?php echo $hesklang['medium']; ?></span></label> | |||
</div> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="p3" value="1" <?php if (isset($priority[3])) {echo 'checked="checked"';} ?> /> <span class="normal"><?php echo $hesklang['low']; ?></span></label> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="assign" class="col-sm-2 control-label"><?php echo $hesklang['show']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<div class="col-xs-4"> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s_my" value="1" <?php if ($s_my[1]) echo 'checked="checked"'; ?> /> <?php echo $hesklang['s_my']; ?></label> | |||
</div> | |||
<?php | |||
if ($can_view_unassigned) | |||
{ | |||
?> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s_un" value="1" <?php if ($s_un[1]) echo 'checked="checked"'; ?> /> <?php echo $hesklang['s_un']; ?></label> | |||
</div> | |||
<?php | |||
} | |||
?> | |||
</div> | |||
<div class="col-xs-4"> | |||
<?php | |||
if ($can_view_ass_others) | |||
{ | |||
?> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="s_ot" value="1" <?php if ($s_ot[1]) echo 'checked="checked"'; ?> /> <?php echo $hesklang['s_ot']; ?></label> | |||
</div> | |||
<?php | |||
} | |||
?> | |||
<div class="checkbox"> | |||
<label><input type="checkbox" name="archive" value="1" <?php if ($archive[1]) echo 'checked="checked"'; ?> /> <?php echo $hesklang['disp_only_archived']; ?></label> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="sort" class="col-sm-2 control-label"><?php echo $hesklang['sort_by']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<div class="col-xs-4"> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="priority" <?php if ($sort == 'priority') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['priority']; ?></label> | |||
</div> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="lastchange" <?php if ($sort == 'lastchange') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['last_update']; ?></label> | |||
</div> | |||
</div> | |||
<div class="col-xs-4"> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="name" <?php if ($sort == 'name') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['name']; ?></label> | |||
</div> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="subject" <?php if ($sort == 'subject') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['subject']; ?></label> | |||
</div> | |||
</div> | |||
<div class="col-xs-4"> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="status" <?php if ($sort == 'status') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['status']; ?></label> | |||
</div> | |||
<div class="radio"> | |||
<label><input type="radio" name="sort" value="id" <?php if ($sort == 'id') {echo 'checked="checked"';} ?> /> <?php echo $hesklang['sequentially']; ?></label> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="asc" class="col-sm-2 control-label"><?php echo $hesklang['category']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<select name="category" class="form-control"> | |||
<option value="0" ><?php echo $hesklang['any_cat']; ?></option> | |||
<?php echo $category_options; ?> | |||
</select> | |||
</div> | |||
</div> | |||
<div class="form-group"> | |||
<label for="asc" class="col-sm-2 control-label"><?php echo $hesklang['order']; ?>:</label> | |||
<div class="col-sm-10"> | |||
<div class="col-xs-4"> | |||
<div class="radio"> | |||
<label><input type="radio" name="asc" value="1" <?php if ($asc) {echo 'checked="checked"';} ?> /> <?php echo $hesklang['ascending']; ?></label> | |||
</div> | |||
<div class="radio"> | |||
<input type="radio" name="asc" value="0" <?php if (!$asc) {echo 'checked="checked"';} ?> /> <?php echo $hesklang['descending']; ?></label> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="form-group" style="text-align: center"> | |||
<input type="submit" value="<?php echo $hesklang['export_btn']; ?>" class="btn btn-default" /> | |||
<input type="hidden" name="cot" value="1" /> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
<?php | |||
require_once(HESK_PATH . 'inc/footer.inc.php'); | |||
exit(); | |||
?> |
@@ -0,0 +1,254 @@ | |||
<?php | |||
/******************************************************************************* | |||
* Title: Help Desk Software HESK | |||
* Version: 2.5.3 from 16th March 2014 | |||
* Author: Klemen Stirn | |||
* Website: http://www.hesk.com | |||
******************************************************************************** | |||
* COPYRIGHT AND TRADEMARK NOTICE | |||
* Copyright 2005-2013 Klemen Stirn. All Rights Reserved. | |||
* HESK is a registered trademark of Klemen Stirn. | |||
* The HESK may be used and modified free of charge by anyone | |||
* AS LONG AS COPYRIGHT NOTICES AND ALL THE COMMENTS REMAIN INTACT. | |||
* By using this code you agree to indemnify Klemen Stirn from any | |||
* liability that might arise from it's use. | |||
* Selling the code for this program, in part or full, without prior | |||
* written consent is expressly forbidden. | |||
* Using this code, in part or full, to create derivate work, | |||
* new scripts or products is expressly forbidden. Obtain permission | |||
* before redistributing this software over the Internet or in | |||
* any other medium. In all cases copyright and header must remain intact. | |||
* This Copyright is in full effect in any country that has International | |||
* Trade Agreements with the United States of America or | |||
* with the European Union. | |||
* Removing any of the copyright notices without purchasing a license | |||
* is expressly forbidden. To remove HESK copyright notice you must purchase | |||
* a license for this script. For more information on how to obtain | |||
* a license please visit the page below: | |||
* https://www.hesk.com/buy.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(); | |||
define('CALENDAR',1); | |||
$_SESSION['hide']['ticket_list'] = true; | |||
/* Check permissions for this feature */ | |||
hesk_checkPermission('can_view_tickets'); | |||
$_SERVER['PHP_SELF'] = './admin_main.php'; | |||
/* Print header */ | |||
require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); | |||
/* Print admin navigation */ | |||
require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); | |||
?> | |||
</td> | |||
</tr> | |||
<tr> | |||
<td> | |||
<h3 align="center"><?php echo $hesklang['tickets_found']; ?></h3> | |||
<?php | |||
// This SQL code will be used to retrieve results | |||
$sql_final = "SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE "; | |||
// This code will be used to count number of results | |||
$sql_count = "SELECT COUNT(*) FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE "; | |||
// This is common SQL for both queries | |||
$sql = ""; | |||
// Some default settings | |||
$archive = array(1=>0,2=>0); | |||
$s_my = array(1=>1,2=>1); | |||
$s_ot = array(1=>1,2=>1); | |||
$s_un = array(1=>1,2=>1); | |||
// --> TICKET CATEGORY | |||
$category = intval( hesk_GET('category', 0) ); | |||
// Make sure user has access to this category | |||
if ($category && hesk_okCategory($category, 0) ) | |||
{ | |||
$sql .= " `category`='{$category}' "; | |||
} | |||
// No category selected, show only allowed categories | |||
else | |||
{ | |||
$sql .= hesk_myCategories(); | |||
} | |||
// Show only tagged tickets? | |||
if ( ! empty($_GET['archive']) ) | |||
{ | |||
$archive[2]=1; | |||
$sql .= " AND `archive`='1' "; | |||
} | |||
// Ticket owner preferences | |||
$fid = 2; | |||
require(HESK_PATH . 'inc/assignment_search.inc.php'); | |||
$hesk_error_buffer = ''; | |||
$no_query = 0; | |||
// Search query | |||
$q = stripslashes( hesk_input( hesk_GET('q', '') ) ); | |||
// No query entered? | |||
if ( ! strlen($q) ) | |||
{ | |||
$hesk_error_buffer .= $hesklang['fsq']; | |||
$no_query = 1; | |||
} | |||
// What field are we searching in | |||
$what = hesk_GET('what', '') or $hesk_error_buffer .= '<br />' . $hesklang['wsel']; | |||
// Sequential ID supported? | |||
if ($what == 'seqid' && ! $hesk_settings['sequential']) | |||
{ | |||