From e0863b6b6db3a5ffe1c95accef4f4c49438772a9 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 23 Mar 2014 16:03:30 -0400 Subject: [PATCH] Initial Hesk UI Commit --- .gitignore | 44 - admin/admin_main.php | 143 ++ admin/admin_settings.php | 2083 ++++++++++++++++++ admin/admin_submit_ticket.php | 322 +++ admin/admin_ticket.php | 1381 ++++++++++++ admin/edit_post.php | 418 ++++ admin/export.php | 934 ++++++++ admin/find_tickets.php | 254 +++ admin/index.php | 477 +++++ admin/knowledgebase_private.php | 525 +++++ admin/mail.php | 717 +++++++ admin/manage_canned.php | 441 ++++ admin/manage_categories.php | 595 ++++++ admin/manage_knowledgebase.php | 2361 +++++++++++++++++++++ admin/manage_users.php | 1040 +++++++++ admin/new_ticket.php | 565 +++++ admin/profile.php | 451 ++++ admin/reports.php | 855 ++++++++ admin/show_tickets.php | 88 + css/bootstrap-theme.min.css | 5 + css/bootstrap.min.css | 5 + css/hesk_newStyle.min.css | 1 + fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20290 bytes fonts/glyphicons-halflings-regular.svg | 229 ++ fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41236 bytes fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23292 bytes hesk_settings.inc.php | 192 ++ img/knowledgebase.png | Bin 0 -> 370 bytes img/viewTicket.png | Bin 0 -> 195 bytes inc/common.inc.php | 1694 +++++++++++++++ inc/header.inc.php | 150 ++ inc/headerAdmin.inc.php | 121 ++ inc/knowledgebase_functions.inc.php | 375 ++++ inc/show_admin_nav.inc.php | 77 + inc/show_search_form.inc.php | 413 ++++ inc/ticket_list.inc.php | 519 +++++ inc/treemenu/TreeMenu_v25.js | 701 ++++++ index.php | 930 ++++++++ install/index.php | 61 + install/install.php | 523 +++++ install/install_functions.inc.php | 919 ++++++++ js/bootstrap.min.js | 7 + js/jquery-1.10.2.min.js | 6 + knowledgebase.php | 553 +++++ language/en/help_files/custom.html | 56 + language/en/help_files/email.html | 207 ++ language/en/help_files/general.html | 100 + language/en/help_files/help_style.css | 45 + language/en/help_files/helpdesk.html | 314 +++ language/en/help_files/index.htm | 8 + language/en/help_files/knowledgebase.html | 100 + language/en/help_files/misc.html | 102 + language/en/text.php | 1192 +++++++++++ print.php | 272 +++ suggest_articles.php | 86 + suggest_email.php | 161 ++ ticket.php | 713 +++++++ 57 files changed, 24487 insertions(+), 44 deletions(-) create mode 100644 admin/admin_main.php create mode 100644 admin/admin_settings.php create mode 100644 admin/admin_submit_ticket.php create mode 100644 admin/admin_ticket.php create mode 100644 admin/edit_post.php create mode 100644 admin/export.php create mode 100644 admin/find_tickets.php create mode 100644 admin/index.php create mode 100644 admin/knowledgebase_private.php create mode 100644 admin/mail.php create mode 100644 admin/manage_canned.php create mode 100644 admin/manage_categories.php create mode 100644 admin/manage_knowledgebase.php create mode 100644 admin/manage_users.php create mode 100644 admin/new_ticket.php create mode 100644 admin/profile.php create mode 100644 admin/reports.php create mode 100644 admin/show_tickets.php create mode 100644 css/bootstrap-theme.min.css create mode 100644 css/bootstrap.min.css create mode 100644 css/hesk_newStyle.min.css create mode 100644 fonts/glyphicons-halflings-regular.eot create mode 100644 fonts/glyphicons-halflings-regular.svg create mode 100644 fonts/glyphicons-halflings-regular.ttf create mode 100644 fonts/glyphicons-halflings-regular.woff create mode 100644 hesk_settings.inc.php create mode 100644 img/knowledgebase.png create mode 100644 img/viewTicket.png create mode 100644 inc/common.inc.php create mode 100644 inc/header.inc.php create mode 100644 inc/headerAdmin.inc.php create mode 100644 inc/knowledgebase_functions.inc.php create mode 100644 inc/show_admin_nav.inc.php create mode 100644 inc/show_search_form.inc.php create mode 100644 inc/ticket_list.inc.php create mode 100644 inc/treemenu/TreeMenu_v25.js create mode 100644 index.php create mode 100644 install/index.php create mode 100644 install/install.php create mode 100644 install/install_functions.inc.php create mode 100644 js/bootstrap.min.js create mode 100644 js/jquery-1.10.2.min.js create mode 100644 knowledgebase.php create mode 100644 language/en/help_files/custom.html create mode 100644 language/en/help_files/email.html create mode 100644 language/en/help_files/general.html create mode 100644 language/en/help_files/help_style.css create mode 100644 language/en/help_files/helpdesk.html create mode 100644 language/en/help_files/index.htm create mode 100644 language/en/help_files/knowledgebase.html create mode 100644 language/en/help_files/misc.html create mode 100644 language/en/text.php create mode 100644 print.php create mode 100644 suggest_articles.php create mode 100644 suggest_email.php create mode 100644 ticket.php diff --git a/.gitignore b/.gitignore index 00a94efa..48a42459 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/admin/admin_main.php b/admin/admin_main.php new file mode 100644 index 00000000..052a0f57 --- /dev/null +++ b/admin/admin_main.php @@ -0,0 +1,143 @@ +install 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'); +?> + +
+
+ +
 
+

'.$hesklang['open_tickets'].'

+
 
+
+ '; + } + + /* 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 " 
"; + + /* Print forms for listing and searching tickets */ + require(HESK_PATH . 'inc/show_search_form.inc.php'); + } + else + { + echo '

'.$hesklang['na_view_tickets'].'

'; + } + + $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 '
 
'; + +/* Clean unneeded session variables */ +hesk_cleanSessionVars('hide'); + ?> +
+ + + diff --git a/admin/admin_settings.php b/admin/admin_settings.php new file mode 100644 index 00000000..227de58a --- /dev/null +++ b/admin/admin_settings.php @@ -0,0 +1,2083 @@ +install 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'); + +// Save the default language for the settings page before choosing user's preferred one +$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'); +hesk_load_database_functions(); + +hesk_session_start(); +hesk_dbConnect(); +hesk_isLoggedIn(); + +// Check permissions for this feature +hesk_checkPermission('can_man_settings'); + +// Test languages function +if (isset($_GET['test_languages'])) +{ + hesk_testLanguage(0); +} + +$help_folder = '../language/' . $hesk_settings['languages'][$hesk_settings['language']]['folder'] . '/help_files/'; + +$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'); + +// Print main manage users page +require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); + +// Demo mode? Hide values of sensitive settings +if ( defined('HESK_DEMO') ) +{ + $hesk_settings['db_host'] = $hesklang['hdemo']; + $hesk_settings['db_name'] = $hesklang['hdemo']; + $hesk_settings['db_user'] = $hesklang['hdemo']; + $hesk_settings['db_pass'] = $hesklang['hdemo']; + $hesk_settings['db_pfix'] = $hesklang['hdemo']; + $hesk_settings['smtp_host_name'] = $hesklang['hdemo']; + $hesk_settings['smtp_user'] = $hesklang['hdemo']; + $hesk_settings['smtp_password'] = $hesklang['hdemo']; + $hesk_settings['pop3_host_name'] = $hesklang['hdemo']; + $hesk_settings['pop3_user'] = $hesklang['hdemo']; + $hesk_settings['pop3_password'] = $hesklang['hdemo']; + $hesk_settings['recaptcha_public_key'] = $hesklang['hdemo']; + $hesk_settings['recaptcha_private_key'] = $hesklang['hdemo']; +} + +?> + +
+
+
+
+ +
+
+ + + + + + + + + + + + +
+ : + + + ' . $hesklang['hud'] . ' '; + } + elseif ($latest != -1) + { + // Is this a beta/dev version? + if ( strpos($hesk_settings['hesk_version'], 'beta') || strpos($hesk_settings['hesk_version'], 'dev') ) + { + echo ' ' . $hesklang['beta'] . ' '; ?> ' . $hesklang['hnw'] . ' '; ?> - - +
+ : + + +
+ /hesk_settings.inc.php + + '.$hesklang['exists'].', '.$hesklang['writable'].''; + } else { + echo ''.$hesklang['exists'].', '.$hesklang['not_writable'].'
'.$hesklang['e_settings']; + } + ?> +
+ / + + '.$hesklang['exists'].', '; + if (is_writable(HESK_PATH . $hesk_settings['attach_dir'])) + { + $enable_use_attachments=1; + echo ''.$hesklang['writable'].''; + } + else + { + echo ''.$hesklang['not_writable'].'
'.$hesklang['e_attdir']; + } + } + else + { + echo ''.$hesklang['no_exists'].', '.$hesklang['not_writable'].'
'.$hesklang['e_attdir']; + } + ?> +
+
+
+
+
+
+ =') && @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)); + + switch ($last) + { + case 'K': + $tmp = $tmp * 1024; + break; + case 'M': + $tmp = $tmp * 1048576; + break; + case 'G': + $tmp = $tmp * 1073741824; + break; + default: + $tmp = $tmp; + } + + 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)); + + switch ($last) + { + case 'K': + $tmp = $tmp * 1024; + break; + case 'M': + $tmp = $tmp * 1048576; + break; + case 'G': + $tmp = $tmp * 1073741824; + break; + default: + $tmp = $tmp; + } + + 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']); + + ?> + + +

+
+ +
+ + + + +
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +   + +
+
+
+ +
+
+
'; + ?> +
+
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + + + + + +
+
+
+ + +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
'; + ?> +
+
+
+ +
+
+
'; + ?> +
+
+ +
+
+
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+ + + +
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ + + + +
+
+ +
+ +
+
    +
    +
+ '; + + ?> +
+ +  
+ + :
+ + + +

+

+ +
+ +  
+ + +
+  
+ + +
+  
+ + +
    +
'; + ?> + +
+ +
+ + +
+ +
+
    +
'; + ?> + +
+  
+
+ +
+
+  
+ +
+
+  
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+ +
    +
+ + + +   () + + + '.$hesklang['e_attach'].''; + } + ?> +
+
+
+ +
+ /> +
+
+
+ $hesklang['B'] . ' (' . $hesklang['bytes'] . ')', + 'kB' => $hesklang['kB'] . ' (' . $hesklang['kilobytes'] . ')', + 'MB' => $hesklang['MB'] . ' (' . $hesklang['megabytes'] . ')', + 'GB' => $hesklang['GB'] . ' (' . $hesklang['gigabytes'] . ')', + ); + $tmp = hesk_formatBytes($hesk_settings['attachments']['max_size'], 0); + list($size, $unit) = explode(' ', $tmp); + ?> + +
+ /> +
+
+ +
+
+
+ +
+ /> +
+
+ + + +
+
+
+ +
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
'; + ?> +
+ +
+ +
+
    +
    +
+ '; + ?> +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+

+
+
+
+
+ +
+
+

+
+
+
+ +
+ +
+
+

+
+
+
+
+ +
+
+

+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + '; + } // End FOR + ?> +
+ +
+

+
+
+ + + '.$hesklang['opt'].' +
+
+ + + +
+
+
+ +
+ +
+
    +
'; + ?> + + + + + + + + + + + +
+
+
+
+ +
+ /> +
+
+
+ +
+ /> +
+
+
+ +
+ /> +
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
    +
'; + ?> +
+ +
+ +
+ autocomplete="off" /> +
+
+
+ +
+ autocomplete="off" /> +
+
+
+
+ +
+
+ + + + + + + + + +
+
+ +
+ +
+
    +
'; + ?> +
+ + +
+
+ +
+ +
+
    +
'; + ?> + + + + + + +
+ +
+
+ +
+ /> +
+
+
+ +
+ /> +
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+
+
'; + ?> +
+ +
+ +
+ autocomplete="off" /> +
+
+
+ +
+ autocomplete="off" /> +
+
+
+
+ +
+
+ + + + + + + + + +
 
+ + + + + + + + + +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+

+
+
+ +
+
+ +
+ +
+
    +
'; + ?> +
+ +
+
+ +
+ +
+
+ + + + + +
+
+
+
+ +
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + + +
+
+
+ +
+ +
+

'.$server_time.'' ; ?>

+ +
+
+
+
+
+ +
+
+

+
+
+
+
+ +
+
+

+
+
+
+
+ +
+
    +
'; + ?> +
+
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + '; + } + else + { + echo '
'.$hesklang['e_save_settings'].''; + } + ?> +
+
+ + + + + 12 ) + { + return -1; + } + elseif ($latest == $hesk_settings['hesk_version']) + { + return true; + } + else + { + return $latest; + } + } + else + { + return -1; + } + +} // END hesk_checkVersion() + + +function hesk_getLatestVersion() +{ + global $hesk_settings; + + // Do we have a cached version file? + if ( file_exists(HESK_PATH . $hesk_settings['attach_dir'] . '/__latest.txt') ) + { + if ( preg_match('/^(\d+)\|([\d.]+)+$/', @file_get_contents(HESK_PATH . $hesk_settings['attach_dir'] . '/__latest.txt'), $matches) && (time() - intval($matches[1])) < 3600 ) + { + return $matches[2]; + } + } + + // No cached file or older than 3600 seconds, try to get an update + $hesk_version_url = 'http://heskcom.s3.amazonaws.com/hesk_version.txt'; + + // Try using cURL + if ( function_exists('curl_init') ) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $hesk_version_url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 6); + $latest = curl_exec($ch); + curl_close($ch); + return hesk_cacheLatestVersion($latest); + } + + // Try using a simple PHP function instead + if ($latest = file_get_contents($hesk_version_url) ) + { + return hesk_cacheLatestVersion($latest); + } + + // Can't check automatically, will need a manual check + return false; + +} // END hesk_getLatestVersion() + + +function hesk_cacheLatestVersion($latest) +{ + global $hesk_settings; + + @file_put_contents(HESK_PATH . $hesk_settings['attach_dir'] . '/__latest.txt', time() . '|' . $latest); + + return $latest; + +} // END hesk_cacheLatestVersion() + + +function hesk_testLanguage($return_options = 0) +{ + global $hesk_settings, $hesklang; + + /* Get a list of valid emails */ + include_once(HESK_PATH . 'inc/email_functions.inc.php'); + $valid_emails = array_keys( hesk_validEmails() ); + + $dir = HESK_PATH . 'language/'; + $path = opendir($dir); + + $text = ''; + $html = ''; + + $text .= "/language\n"; + + /* Test all folders inside the language folder */ + while (false !== ($subdir = readdir($path))) + { + if ($subdir == "." || $subdir == "..") + { + continue; + } + + if (filetype($dir . $subdir) == 'dir') + { + $add = 1; + $langu = $dir . $subdir . '/text.php'; + $email = $dir . $subdir . '/emails'; + + /* Check the text.php */ + $text .= " |-> /$subdir\n"; + $text .= " |-> text.php: "; + if (file_exists($langu)) + { + $tmp = file_get_contents($langu); + + // Some servers add slashes to file_get_contents output + if ( strpos ($tmp, '[\\\'LANGUAGE\\\']') !== false ) + { + $tmp = stripslashes($tmp); + } + + $err = ''; + if (!preg_match('/\$hesklang\[\'LANGUAGE\'\]\=\'(.*)\'\;/',$tmp,$l)) + { + $err .= " |----> MISSING: \$hesklang['LANGUAGE']\n"; + } + + if (strpos($tmp,'$hesklang[\'ENCODING\']') === false) + { + $err .= " |----> MISSING: \$hesklang['ENCODING']\n"; + } + + if (strpos($tmp,'$hesklang[\'_COLLATE\']') === false) + { + $err .= " |----> MISSING: \$hesklang['_COLLATE']\n"; + } + + if (strpos($tmp,'$hesklang[\'EMAIL_HR\']') === false) + { + $err .= " |----> MISSING: \$hesklang['EMAIL_HR']\n"; + } + + /* Check if language file is for current version */ + if (strpos($tmp,'$hesklang[\'recaptcha_error\']') === false) + { + $err .= " |----> WRONG VERSION (not ".$hesk_settings['hesk_version'].")\n"; + } + + if ($err) + { + $text .= "ERROR\n" . $err; + $add = 0; + } + else + { + $l[1] = hesk_input($l[1]); + $l[1] = str_replace('|',' ',$l[1]); + $text .= "OK ($l[1])\n"; + } + } + else + { + $text .= "ERROR\n"; + $text .= " |----> MISSING: text.php\n"; + $add = 0; + } + + /* Check emails folder */ + $text .= " |-> /emails: "; + if (file_exists($email) && filetype($email) == 'dir') + { + $err = ''; + foreach ($valid_emails as $eml) + { + if (!file_exists($email.'/'.$eml.'.txt')) + { + $err .= " |----> MISSING: $eml.txt\n"; + } + } + + if ($err) + { + $text .= "ERROR\n" . $err; + $add = 0; + } + else + { + $text .= "OK\n"; + } + } + else + { + $text .= "ERROR\n"; + $text .= " |----> MISSING: /emails folder\n"; + $add = 0; + } + + $text .= "\n"; + + /* Add an option for the + + + : + + + + : + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + '', + 1 => '', + 2 => '', + 3 => '' + ); + + echo ''; + + echo ''; + echo ''; + echo ''; + ?> + + +
+

+  '; + } + if ($ticket['locked']) + { + echo ' '; + } + echo $ticket['subject']; + ?>

+
     + '.$hesklang['close_action'].''; + } + else + { + echo ''.$hesklang['open_action'].''; + } + ?> +
+ : + +   + + + +
+

Delete Note

+

-

+

+
';} + elseif ($ticket['priority'] == 1) {echo 'class="highPriority">';} + else {echo 'class="medLowPriority">';} + + echo '

'.$hesklang['priority'].'

'; + + if ($ticket['priority']==0) {echo '

'.$hesklang['critical'].'

';} + elseif ($ticket['priority']==1) {echo '

'.$hesklang['high'].'

';} + elseif ($ticket['priority']==2) {echo '

'.$hesklang['medium'].'

';} + else {echo '

'.$hesklang['low'].'

';} + echo '
+
+ + + + + + + + +
+ +

'.$hesklang['status'].'

'; + + $random=rand(10000,99999); + + $status_options = array( + 0 => '', + 1 => '', + 2 => '', + 4 => '', + 5 => '', + 3 => '', + ); + + switch ($ticket['status']) + { + case 0: + echo '

'.$hesklang['open'].'

'; + break; + case 1: + echo '

'.$hesklang['wait_staff_reply'].'

'; + break; + case 2: + echo '

'.$hesklang['wait_cust_reply'].'

'; + break; + case 4: + echo '

'.$hesklang['in_progress'].'

'; + break; + case 5: + echo '

'.$hesklang['on_hold'].'

'; + break; + default: + echo '

'.$hesklang['closed'].'

'; + } echo '
+ +
+ + + + + + +
+

'.$hesklang['owner'].'

+

'; + + echo isset($admins[$ticket['owner']]) ? $admins[$ticket['owner']] : + ($can_assign_self ? $hesklang['unas'].' ['.$hesklang['asss'].']' : $hesklang['unas']); + + echo '


'; + + if (hesk_checkPermission('can_assign_others',0)) + { + echo' +
+ + + + + + '; + } + echo '

'.$hesklang['category'].'

+

'.$category['name'].'

'; + + if ($can_change_cat) + { + echo ' + +
+
+ + + + + + + + +
'; } + + echo '
+ + + '; + } + ?> + + + + +
> +
+
+
+
:
+
+
+
+ + + + +


: + + + $v) + { + if ($v['use'] && $v['place']==0) + { + echo ' +

'.$v['name'].': '.$ticket[$k].'

'; + } + } + ?> +
+
+ +

:

+


 

+
+
+ + $v) + { + if ($v['use'] && $v['place']) + { + echo ' +

'.$v['name'].': '.$ticket[$k].'

'; + } + } + /* Attachments */ + hesk_listAttachments($ticket['attachments'], $i); + ?> +
+
+
+ + + +

+
+ + +
+ +'.$hesklang['attachments'].':
'; + $att=explode(',',substr($attachments, 0, -1)); + foreach ($att as $myatt) + { + list($att_id, $att_name) = explode('#', $myatt); + + /* Can edit and delete tickets? */ + if ($can_edit && $can_delete) + { + echo ' '; + } + + echo ' + + '.$att_name.'
+ '; + } + echo '

'; + + return true; +} // End hesk_listAttachments() + + +function hesk_getAdminButtons($reply=0,$white=1) +{ + global $hesk_settings, $hesklang, $ticket, $reply, $trackingID, $can_edit, $can_archive, $can_delete; + + $options = '
'; + + /* Style and mousover/mousout */ + $tmp = $white ? 'White' : 'Blue'; + $style = 'class="option'.$tmp.'OFF" onmouseover="this.className=\'option'.$tmp.'ON\'" onmouseout="this.className=\'option'.$tmp.'OFF\'"'; + + /* Lock ticket button */ + if ( /* ! $reply && */ $can_edit) + { + if ($ticket['locked']) + { + $des = $hesklang['tul'] . ' - ' . $hesklang['isloc']; + $options .= ' '.$hesklang['tul'].' '; + } + else + { + $des = $hesklang['tlo'] . ' - ' . $hesklang['isloc']; + $options .= ' '.$hesklang['tlo'].' '; + } + } + + /* Tag ticket button */ + if ( /* ! $reply && */ $can_archive) + { + if ($ticket['archive']) + { + $options .= ''.$hesklang['remove_archive'].' '; + } + else + { + $options .= ' '.$hesklang['add_archive'].' '; + } + } + + /* Import to knowledgebase button */ + if ($hesk_settings['kb_enable'] && hesk_checkPermission('can_man_kb',0)) + { + $options .= ' '.$hesklang['import_kb'].' '; + } + + /* Print ticket button */ + $options .= ' '.$hesklang['printer_friendly'].' '; + + /* Edit post */ + if ($can_edit) + { + $tmp = $reply ? '&reply='.$reply['id'] : ''; + $options .= ' '.$hesklang['edtt'].' '; + } + + + /* Delete ticket */ + if ($can_delete) + { + if ($reply) + { + $url = 'admin_ticket.php'; + $tmp = 'delete_post='.$reply['id']; + $img = 'delete.png'; + $txt = $hesklang['delt']; + } + else + { + $url = 'delete_tickets.php'; + $tmp = 'delete_ticket=1'; + $img = 'delete_ticket.png'; + $txt = $hesklang['dele']; + } + $options .= ' '.$txt.' '; + } + + /* Return generated HTML */ + $options .= '
'; + return $options; + +} // END hesk_getAdminButtons() + +function hesk_getAdminButtonsInTicket($reply=0,$white=1) +{ + global $hesk_settings, $hesklang, $ticket, $reply, $trackingID, $can_edit, $can_archive, $can_delete; + + $options = '
'; + + /* Style and mousover/mousout */ + $tmp = $white ? 'White' : 'Blue'; + $style = 'class="option'.$tmp.'OFF" onmouseover="this.className=\'option'.$tmp.'ON\'" onmouseout="this.className=\'option'.$tmp.'OFF\'"'; + + /* Edit post */ + if ($can_edit) + { + $tmp = $reply ? '&reply='.$reply['id'] : ''; + $options .= ' '.$hesklang['edtt'].' '; + } + + + /* Delete ticket */ + if ($can_delete) + { + if ($reply) + { + $url = 'admin_ticket.php'; + $tmp = 'delete_post='.$reply['id']; + $img = 'delete.png'; + $txt = $hesklang['delt']; + } + else + { + $url = 'delete_tickets.php'; + $tmp = 'delete_ticket=1'; + $img = 'delete_ticket.png'; + $txt = $hesklang['dele']; + } + $options .= ' '.$txt.' '; + } + + /* Return generated HTML */ + $options .= '
'; + return $options; + +} // END hesk_getAdminButtonsInTicket() + + +function print_form() +{ + global $hesk_settings, $hesklang; + global $trackingID; + + /* Print header */ + require_once(HESK_PATH . 'inc/header.inc.php'); + + /* Print admin navigation */ + require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); + ?> + + + + + + +  
+ + + +
+ + + + + + + + + + + + + + + + +
  + +
+ + + + + + + + + + + + + + + + + + +
+

+
  
  + :

  +
 
+ +
+ +
 
+
+ +

 

+ +
> +
+
+
+
+
+ +
+

:

+
+
+

:

+

+
+
+ '.$hesklang['rnh'].'

'; + } + elseif ($reply['rating']==5) + { + echo '

'.$hesklang['rh'].'

'; + } + } + + /* Show "unread reply" message? */ + if ($reply['staffid'] && ! $reply['read']) + { + echo '

'.$hesklang['unread'].'

'; + } + ?> +
+
+
+ + + +

+
+
+ +
+ + +
+ +
+ +
+
+ + +
+
+ +
+ +
+
+ + +
+
+ +
+ +
+ +
+
+ +
+ +
+
'; + } + + echo '' . $hesklang['ful'] . ''; + ?> +
+
+ +
+ +
+ '.$hesklang['asss2'].'
'; + } + else + { + echo '
'; + } + } + if ($ticket['status'] != 3) + { + echo '
'; + } + ?> +
+

+ + ()
+

+ + + + + +
+
+
+ + + + + diff --git a/admin/edit_post.php b/admin/edit_post.php new file mode 100644 index 00000000..07b48e08 --- /dev/null +++ b/admin/edit_post.php @@ -0,0 +1,418 @@ +'; + foreach ($hesk_error_buffer as $error) + { + $myerror .= "
  • $error
  • \n"; + } + $myerror .= ''; + 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 = ''; + 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) ) . '
    '; + } + $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'); +?> + + + +
    +
    +

    +
    + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    + $v) + { + if ($v['use']) + { + $k_value = $ticket[$k]; + + if ($v['type'] == 'checkbox') + { + $k_value = explode('
    ',$k_value); + } + + switch ($v['type']) + { + /* Radio box */ + case 'radio': + echo ' +
    + +
    '; + + $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 '
    '; + } + + echo '
    +
    + '; + break; + + /* Select drop-down box */ + case 'select': + echo ' +
    + +
    +
    + '; + break; + + /* Checkbox */ + case 'checkbox': + echo ' +
    + +
    '; + + $options = explode('#HESK#',$v['value']); + + foreach ($options as $option) + { + + if (in_array($option,$k_value)) + { + $checked = 'checked="checked"'; + } + else + { + $checked = ''; + } + + echo '
    '; + } + + echo '
    +
    + '; + 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 ' +
    + +
    + +
    +
    '; + break; + + /* Default text input */ + default: + if (strlen($k_value) != 0) + { + $k_value = hesk_msgToPlain($k_value,0,0); + $v['value'] = $k_value; + } + echo ' +
    + +
    + +
    +
    + '; + } + } + } + ?> + + +
    + +
    + +
    +
    +
    + + + + + +
    +
    + + +
    +
    +
    +
    + + +

    + +

     

    + + diff --git a/admin/export.php b/admin/export.php new file mode 100644 index 00000000..a32cec47 --- /dev/null +++ b/admin/export.php @@ -0,0 +1,934 @@ + 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 .= ''; +} + +// 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 = '

    '; + $flush_me .= hesk_date() . " | {$hesklang['inite']} "; + + if ($date_from == $date_to) + { + $flush_me .= "(" . hesk_dateToString($date_from,0) . ")
    \n"; + } + else + { + $flush_me .= "(" . hesk_dateToString($date_from,0) . " - " . hesk_dateToString($date_to,0) . ")
    \n"; + } + + // Start generating file contents + $tmp = ' + + + + + + + 8250 + 16275 + 360 + 90 + False + False + + + + + + + + +'; + + // Define column width + $tmp .= ' + + + + + + + + + + + + + + '; + + foreach ($hesk_settings['custom_fields'] as $k=>$v) + { + if ($v['use']) + { + $tmp .= '' . "\n"; + } + } + + // Define first row (header) + $tmp .= ' + + # + '.$hesklang['trackID'].' + '.$hesklang['date'].' + '.$hesklang['last_update'].' + '.$hesklang['name'].' + '.$hesklang['email'].' + '.$hesklang['category'].' + '.$hesklang['priority'].' + '.$hesklang['status'].' + '.$hesklang['subject'].' + '.$hesklang['message'].' + '.$hesklang['owner'].' + '.$hesklang['ts'].' + '; + + foreach ($hesk_settings['custom_fields'] as $k=>$v) + { + if ($v['use']) + { + $tmp .= ''.$v['name'].'' . "\n"; + } + } + + $tmp .= "\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']}
    \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 .= ' + +'.$ticket['id'].' + +'.$ticket['dt'].' +'.$ticket['lastchange'].' + + + + + + + + + +'; + + // Add custom fields + foreach ($hesk_settings['custom_fields'] as $k=>$v) + { + if ($v['use']) + { + $tmp .= ' ' . "\n"; + } + } + + $tmp .= "\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 = ' +
    + + +
    +