diff --git a/.gitignore b/.gitignore index ad0887cb..0b5c03f5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ admin/archive.php admin/custom_statuses.php admin/email_templates.php admin/generate_spam_question.php +admin/resend_notification.php admin/test_connection.php attachments/index.htm cache/ @@ -19,6 +20,7 @@ header.txt hesk_settings.inc.php img/add_article.png img/add_category.png +img/anonymize.png img/article_text.png img/autoassign_off.png img/autoassign_on.png @@ -34,8 +36,10 @@ img/delete.png img/delete_off.png img/delete_ticket.png img/edit.png +img/email.png img/error.png img/existingticket.png +img/export.png img/flag_critical.png img/flag_high.png img/flag_low.png @@ -81,6 +85,7 @@ img/lock.png img/login.png img/mail.png img/manage.png +img/menu.png img/minus.gif img/minusbottom.gif img/minustop.gif @@ -260,6 +265,7 @@ language/en/emails/new_ticket.txt language/en/emails/new_ticket_staff.txt language/en/emails/ticket_assigned_to_you.txt language/en/index.htm +language/en/text.php language/index.htm language/* !language/en diff --git a/admin/admin_main.php b/admin/admin_main.php index 59898d18..df0b082a 100644 --- a/admin/admin_main.php +++ b/admin/admin_main.php @@ -108,23 +108,17 @@ else { >23)."\66\x34".chr(796917760>>23)."\x65\156\143".chr(0157)."\x64\145";$hesk_settings['hesk_license']($x1a("\x3c\150r\x20\57\76".chr(503316480>>23)."\x74\141\142l\x65\40".chr(0142).chr(0157).chr(0162)."\144\145r\x3d\42\60".chr(285212672>>23)."\x20\x77\x69".chr(0144)."th".chr(511705088>>23)."\x22".chr(061)."\60\60\x25\42".chr(520093696>>23)."\x3c\164".chr(0162).">\74t\x64\x3e\x3c".chr(0142).chr(076).$hesklang[chr(956301312>>23)."\145\155\157\x76e".chr(796917760>>23)."\x73ta\164e\x6d".chr(847249408>>23)."\156\x74"].chr(503316480>>23)."\x2f\142\x3e".chr(074)."\57t\x64\76".chr(074)."td".chr(268435456>>23)."\x73ty\154\x65\x3d\x22te".chr(1006632960>>23)."t\x2d\141\x6c\x69".chr(0147).chr(922746880>>23)."\x3ar\151\x67ht\"\76".chr(503316480>>23)."\141 \x68\162\145\146\x3d\42".chr(0112).chr(813694976>>23)."v\141".chr(0163).chr(830472192>>23)."\162\x69".chr(0160).chr(0164)."\x3a".chr(989855744>>23)."\157\151d\50\x30".chr(343932928>>23).chr(042)."\40onc\154\151\143\153\x3d".chr(042)."\x61\x6c\145\x72t(\x27".$hesklang["\163".chr(981467136>>23)."\x70".chr(939524096>>23).chr(0157)."\162\164\137n".chr(931135488>>23)."\x74\151".chr(0143)."\x65"].chr(047)."\51\42\x3e".$hesklang["\x73\x68"]."\74".chr(394264576>>23)."\x61\x3e\74\57\164d\76\x3c/\x74\162\76".chr(503316480>>23).chr(057)."t\x61\x62\x6ce\x3e\x3c\x70\x3e".$hesklang[chr(0163)."\x75ppo\x72\x74\137".chr(956301312>>23).chr(847249408>>23)."\155".chr(931135488>>23)."v\x65"]."\x2e\x20\x3c".chr(813694976>>23)."\40\x68re\x66\x3d".chr(285212672>>23)."\150".chr(973078528>>23).chr(973078528>>23)."\160\x73".chr(486539264>>23)."\57\x2f".chr(998244352>>23)."\x77\167".chr(056)."\150".chr(847249408>>23)."s\153\56\x63\157".chr(0155)."/".chr(0142)."\165\171.".chr(0160)."h\x70".chr(285212672>>23)."\x20\x74\141".chr(0162)."g".chr(847249408>>23)."\164\x3d".chr(042)."\137b\x6c".chr(813694976>>23)."\x6ek\x22\76".$hesklang["\x63\154\151\143\153\x5f".chr(880803840>>23)."\x6e".chr(855638016>>23).chr(0157)]."\x3c/\141\x3e\x3c\x2fp".chr(076)."<\150\162\x20\x2f\x3e"),""); + /******************************************************************************* + END LICENSE CODE + *******************************************************************************/ /* Clean unneeded session variables */ hesk_cleanSessionVars('hide'); diff --git a/admin/admin_settings.php b/admin/admin_settings.php index 8fd9fd77..279833f5 100644 --- a/admin/admin_settings.php +++ b/admin/admin_settings.php @@ -30,6 +30,7 @@ $hesk_settings['language_default'] = $hesk_settings['language']; require(HESK_PATH . 'inc/common.inc.php'); $hesk_settings['language'] = $hesk_settings['language_default']; require(HESK_PATH . 'inc/admin_functions.inc.php'); +require(HESK_PATH . 'inc/setup_functions.inc.php'); require(HESK_PATH . 'inc/mail_functions.inc.php'); hesk_load_database_functions(); @@ -54,8 +55,6 @@ $help_folder = '../language/' . $hesk_settings['languages'][$hesk_settings['lang $enable_save_settings = 0; $enable_use_attachments = 0; -$server_time = date('H:i', strtotime(hesk_date())); - // Print header require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); @@ -82,64 +81,6 @@ if (defined('HESK_DEMO')) { $hesk_settings['imap_password'] = $hesklang['hdemo']; } -// Check file attachment limits -if ($hesk_settings['attachments']['use'] && !defined('HESK_DEMO')) { - // Check number of attachments per post - if (version_compare(phpversion(), '5.2.12', '>=') && @ini_get('max_file_uploads') && @ini_get('max_file_uploads') < $hesk_settings['attachments']['max_number']) { - hesk_show_notice($hesklang['fatte1']); - } - - // Check max attachment size - $tmp = @ini_get('upload_max_filesize'); - if ($tmp) { - $last = strtoupper(substr($tmp, -1)); - $number = substr($tmp, 0, -1); - - switch ($last) { - case 'K': - $tmp = $number * 1024; - break; - case 'M': - $tmp = $number * 1048576; - break; - case 'G': - $tmp = $number * 1073741824; - break; - default: - $tmp = $number; - } - - if ($tmp < $hesk_settings['attachments']['max_size']) { - hesk_show_notice($hesklang['fatte2']); - } - } - - // Check max post size - $tmp = @ini_get('post_max_size'); - if ($tmp) { - $last = strtoupper(substr($tmp, -1)); - $number = substr($tmp, 0, -1); - - switch ($last) { - case 'K': - $tmp = $number * 1024; - break; - case 'M': - $tmp = $number * 1048576; - break; - case 'G': - $tmp = $number * 1073741824; - break; - default: - $tmp = $number; - } - - if ($tmp < ($hesk_settings['attachments']['max_size'] * $hesk_settings['attachments']['max_number'] + 524288)) { - hesk_show_notice($hesklang['fatte3']); - } - } -} - $hesklang['err_custname'] = addslashes($hesklang['err_custname']); @@ -250,32 +191,6 @@ $modsForHesk_settings = mfh_getSettings(); } }; - var server_time = ""; - var today = new Date(); - today.setHours(server_time.substr(0, server_time.indexOf(":"))); - today.setMinutes(server_time.substr(server_time.indexOf(":") + 1)); - - function startTime() { - var h = today.getHours(); - var m = today.getMinutes(); - var s = today.getSeconds(); - - h = checkTime(h); - m = checkTime(m); - - document.getElementById('servertime').innerHTML = h + ":" + m; - s = s + 1; - today.setSeconds(s); - t = setTimeout(function() { startTime(); },1000); - } - - function checkTime(i) { - if (i < 10) { - i = "0" + i; - } - return i; - } - function checkRequiredEmail(field) { if (document.getElementById('s_require_email_0').checked && document.getElementById('s_email_view_ticket').checked) { if (field == 's_require_email_0' && confirm('')) { @@ -339,6 +254,87 @@ $modsForHesk_settings = mfh_getSettings(); =') && @ini_get('max_file_uploads') && @ini_get('max_file_uploads') < $hesk_settings['attachments']['max_number']) { + hesk_show_notice($hesklang['fatte1']); + } + + // Check max attachment size + $tmp = @ini_get('upload_max_filesize'); + if ($tmp) { + $last = strtoupper(substr($tmp, -1)); + $number = substr($tmp, 0, -1); + + switch ($last) { + case 'K': + $tmp = $number * 1024; + break; + case 'M': + $tmp = $number * 1048576; + break; + case 'G': + $tmp = $number * 1073741824; + break; + default: + $tmp = $number; + } + + if ($tmp < $hesk_settings['attachments']['max_size']) { + hesk_show_notice($hesklang['fatte2']); + } + } + + // Check max post size + $tmp = @ini_get('post_max_size'); + if ($tmp) { + $last = strtoupper(substr($tmp, -1)); + $number = substr($tmp, 0, -1); + + switch ($last) { + case 'K': + $tmp = $number * 1024; + break; + case 'M': + $tmp = $number * 1048576; + break; + case 'G': + $tmp = $number * 1073741824; + break; + default: + $tmp = $number; + } + + if ($tmp < ($hesk_settings['attachments']['max_size'] * $hesk_settings['attachments']['max_number'] + 524288)) { + hesk_show_notice($hesklang['fatte3']); + } + } + + // If SMTP server is used, "From email" should match SMTP username + if ($hesk_settings['smtp'] && strtolower($hesk_settings['smtp_user']) != strtolower($hesk_settings['noreply_mail']) && hesk_validateEmail($hesk_settings['smtp_user'], 'ERR', 0)) { + hesk_show_notice(sprintf($hesklang['from_warning'], $hesklang['email_noreply'], $hesklang['tab_1'], $hesk_settings['smtp_user'])); + } + + // If POP3 fetching is active, no user should have the same email address + if ($hesk_settings['pop3'] && hesk_validateEmail($hesk_settings['pop3_user'], 'ERR', 0)) { + $res = hesk_dbQuery("SELECT `name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."users` WHERE `email` LIKE '".hesk_dbEscape($hesk_settings['pop3_user'])."'"); + + if (hesk_dbNumRows($res) > 0) { + hesk_show_notice(sprintf($hesklang['pop3_warning'], hesk_dbResult($res,0,0), $hesk_settings['pop3_user']) . "

" . $hesklang['fetch_warning'], $hesklang['warn']); + } + } + + // If IMAP fetching is active, no user should have the same email address + if ($hesk_settings['imap'] && hesk_validateEmail($hesk_settings['imap_user'], 'ERR', 0)) { + $res = hesk_dbQuery("SELECT `name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."users` WHERE `email` LIKE '".hesk_dbEscape($hesk_settings['imap_user'])."'"); + + if (hesk_dbNumRows($res) > 0) { + hesk_show_notice(sprintf($hesklang['imap_warning'], hesk_dbResult($res,0,0), $hesk_settings['imap_user']) . "

" . $hesklang['fetch_warning'], $hesklang['warn']); + } + } + } ?>
@@ -1495,14 +1491,14 @@ $modsForHesk_settings = mfh_getSettings();

@@ -2862,10 +2858,17 @@ $modsForHesk_settings = mfh_getSettings(); $onload_status = ' disabled '; } - echo ' + // Is IMAP extension loaded? + if ( ! function_exists('imap_open')) { + echo ''. $hesklang['disabled'] . ' - ' . $hesklang['imap_not']; + $onload_div = 'none'; + } else { + echo '
   
'; + } ?> + @@ -3446,53 +3449,28 @@ $modsForHesk_settings = mfh_getSettings();

- +
-

' . $server_time . ''; ?>

- -
-
-
-
-
- -
-
-

-
-
-
-
- -
-
-

-
-
-
-
- - -
    -
'; + // Get list of supported timezones + $timezone_list = hesk_generate_timezone_list(); + + // Do we need to localize month names? + if ($hesk_settings['language'] != 'English') { + $timezone_list = hesk_translate_timezone_list($timezone_list); + } ?> +
diff --git a/admin/admin_settings_save.php b/admin/admin_settings_save.php index cd6c96cf..2a63cee4 100644 --- a/admin/admin_settings_save.php +++ b/admin/admin_settings_save.php @@ -419,9 +419,10 @@ $set['updatedformat'] = hesk_checkMinMax(intval(hesk_POST('s_updatedformat')), 0 /*** MISC ***/ /* --> Date & Time */ -$set['diff_hours'] = floatval(hesk_POST('s_diff_hours', 0)); -$set['diff_minutes'] = floatval(hesk_POST('s_diff_minutes', 0)); -$set['daylight'] = empty($_POST['s_daylight']) ? 0 : 1; +$set['timezone'] = hesk_input(hesk_POST('s_timezone')); +if (!in_array($set['timezone'], timezone_identifiers_list())) { + $set['timezone'] = 'UTC'; +} $set['timeformat'] = hesk_input(hesk_POST('s_timeformat')) or $set['timeformat'] = 'Y-m-d H:i:s'; /* --> Other */ @@ -881,9 +882,7 @@ $hesk_settings[\'updatedformat\']=' . $set['updatedformat'] . '; // ==> MISC // --> Date & Time -$hesk_settings[\'diff_hours\']=' . $set['diff_hours'] . '; -$hesk_settings[\'diff_minutes\']=' . $set['diff_minutes'] . '; -$hesk_settings[\'daylight\']=' . $set['daylight'] . '; +$hesk_settings[\'timezone\']=\'' . $set['timezone'] . '\'; $hesk_settings[\'timeformat\']=\'' . $set['timeformat'] . '\'; // --> Other diff --git a/admin/admin_submit_ticket.php b/admin/admin_submit_ticket.php index 80d1269e..eca0d604 100644 --- a/admin/admin_submit_ticket.php +++ b/admin/admin_submit_ticket.php @@ -300,6 +300,11 @@ if (!$modsForHesk_settings['rich_text_for_tickets']) { $tmpvar['message'] = nl2br($tmpvar['message']); } +// Track who assigned the ticket +if ($tmpvar['owner'] > 0) { + $tmpvar['assignedby'] = !empty($autoassign_owner) ? -1 : $_SESSION['id']; +} + $tmpvar['latitude'] = hesk_POST('latitude', 'E-4'); $tmpvar['longitude'] = hesk_POST('longitude', 'E-4'); diff --git a/admin/admin_ticket.php b/admin/admin_ticket.php index b180ab34..535b5b31 100644 --- a/admin/admin_ticket.php +++ b/admin/admin_ticket.php @@ -50,6 +50,9 @@ $can_unban_emails = hesk_checkPermission('can_unban_emails', 0); $can_ban_ips = hesk_checkPermission('can_ban_ips', 0); $can_unban_ips = hesk_checkPermission('can_unban_ips', 0); $can_resolve = hesk_checkPermission('can_resolve', 0); +$can_view_ass_by = hesk_checkPermission('can_view_ass_by', 0); +$can_privacy = hesk_checkPermission('can_privacy',0); +$can_export = hesk_checkPermission('can_export',0); // Get ticket ID $trackingID = hesk_cleanID() or print_form(); @@ -90,7 +93,10 @@ if (hesk_dbNumRows($res) != 1) { /* Permission to view this ticket? */ if ($ticket['owner'] && $ticket['owner'] != $_SESSION['id'] && !hesk_checkPermission('can_view_ass_others', 0)) { - hesk_error($hesklang['ycvtao']); + // Maybe this user is allowed to view tickets he/she assigned? + if (!$can_view_ass_by || $ticket['assignedby'] != $_SESSION['id']) { + hesk_error($hesklang['ycvtao']); + } } if (!$ticket['owner'] && !$can_view_unassigned) { @@ -163,7 +169,10 @@ if ($isManager) { $can_unban_emails = $can_ban_ips = $can_unban_ips = - $can_resolve = true; + $can_resolve = + $can_view_ass_by = + $can_privacy = + $can_export = true; } /* Is this user allowed to view tickets inside this category? */ @@ -748,9 +757,11 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); ?>
+ +