From 379d096f88e95ed3cabccc990469de9521c653a0 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:29:01 -0400 Subject: [PATCH 01/15] #331 Update admin_settings_save --- admin/admin_settings_save.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/admin/admin_settings_save.php b/admin/admin_settings_save.php index cd9e186c..54f38115 100644 --- a/admin/admin_settings_save.php +++ b/admin/admin_settings_save.php @@ -35,6 +35,12 @@ define('IN_SCRIPT',1); define('HESK_PATH','../'); +// Make sure OPcache is reset when modifying settings +if ( function_exists('opcache_reset') ) +{ + opcache_reset(); +} + /* Get all the required files and functions */ require(HESK_PATH . 'hesk_settings.inc.php'); require(HESK_PATH . 'modsForHesk_settings.inc.php'); @@ -108,7 +114,7 @@ else /* --> Helpdesk settings */ $set['hesk_title'] = hesk_input( hesk_POST('s_hesk_title'), $hesklang['err_htitle']); $set['hesk_title'] = str_replace('\\"','"',$set['hesk_title']); -$set['hesk_url'] = hesk_input( hesk_POST('s_hesk_url'), $hesklang['err_hurl']); +$set['hesk_url'] = rtrim( hesk_input( hesk_POST('s_hesk_url'), $hesklang['err_hurl']), '/'); // ---> check admin folder $set['admin_dir'] = isset($_POST['s_admin_dir']) && ! is_array($_POST['s_admin_dir']) ? preg_replace('/[^a-zA-Z0-9_-]/', '', $_POST['s_admin_dir']) : 'admin'; @@ -487,6 +493,19 @@ for ($i=1;$i<=20;$i++) { $set['custom_fields'][$this_field]['type'] = 'text'; } + + // Try to detect if field type changed to anything except "select" + if ($set['custom_fields'][$this_field]['type'] != 'select') + { + // If type is "radio" or "checkbox" remove "please select", keep other options + $set['custom_fields'][$this_field]['value'] = str_replace('{HESK_SELECT}', '', $set['custom_fields'][$this_field]['value']); + + // Field type changed to "text" or "textarea", clear default value if it contains "#HESK#" separator + if ( in_array($set['custom_fields'][$this_field]['type'], array('text','textarea')) && ! in_array($hesk_settings['custom_fields'][$this_field]['type'], array('text','textarea')) && strpos($set['custom_fields'][$this_field]['value'], '#HESK#') !== false ) + { + $set['custom_fields'][$this_field]['value'] = ''; + } + } } else { From 3619a4c5075f9680df09dd6ac8fc68a76f8211ce Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:29:12 -0400 Subject: [PATCH 02/15] #331 Update password --- admin/password.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/admin/password.php b/admin/password.php index 4811a896..754a5736 100644 --- a/admin/password.php +++ b/admin/password.php @@ -238,6 +238,9 @@ elseif ( isset($_GET['h']) ) // Expire all verification hashes for this user hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."reset_password` WHERE `user`=".intval($row['user'])); + // Load additional required functions + require(HESK_PATH . 'inc/admin_functions.inc.php'); + // Get user details $res = hesk_dbQuery('SELECT * FROM `'.$hesk_settings['db_pfix']."users` WHERE `id`=".intval($row['user'])." LIMIT 1"); $row = hesk_dbFetchAssoc($res); @@ -245,6 +248,11 @@ elseif ( isset($_GET['h']) ) { $_SESSION[$k]=$v; } + + // Set a tag that will be used to expire sessions after username or password change + $_SESSION['session_verify'] = hesk_activeSessionCreateTag($_SESSION['user'], $_SESSION['pass']); + + // We don't need the password hash anymore unset($_SESSION['pass']); // Clean brute force attempts From a0958641ff0416f1e8456fc30fa7527f992817af Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:29:22 -0400 Subject: [PATCH 03/15] #331 Update admin_functions --- inc/admin_functions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/admin_functions.inc.php b/inc/admin_functions.inc.php index 03224155..c518dd99 100644 --- a/inc/admin_functions.inc.php +++ b/inc/admin_functions.inc.php @@ -758,13 +758,13 @@ function hesk_checkPermission($feature,$showerror=1) { global $hesklang; /* Admins have full access to all features */ - if ($_SESSION['isadmin']) + if (isset($_SESSION['isadmin']) && $_SESSION['isadmin']) { return true; } /* Check other staff for permissions */ - if (strpos($_SESSION['heskprivileges'], $feature) === false) + if (isset($_SESSION['heskprivileges']) && strpos($_SESSION['heskprivileges'], $feature) === false) { if ($showerror) { From f3d84cf361ab757a3bf6e4e9d7cea36cf1cd9531 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:29:35 -0400 Subject: [PATCH 04/15] #331 Update common --- inc/common.inc.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/inc/common.inc.php b/inc/common.inc.php index 8fe783c0..f033a92e 100644 --- a/inc/common.inc.php +++ b/inc/common.inc.php @@ -37,6 +37,12 @@ if (!defined('IN_SCRIPT')) {die('Invalid attempt');} #error_reporting(E_ALL); +// Set correct Content-Type header +if ( ! defined('NO_HTTP_HEADER') ) +{ + header('Content-Type: text/html; charset=utf-8'); +} + // Set backslash options if (get_magic_quotes_gpc()) { From b774572766026d01562feb0c94035201f3f9bd55 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:30:20 -0400 Subject: [PATCH 05/15] #331 Update email_functions --- inc/email_functions.inc.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/inc/email_functions.inc.php b/inc/email_functions.inc.php index fc335c19..134c484d 100644 --- a/inc/email_functions.inc.php +++ b/inc/email_functions.inc.php @@ -104,7 +104,7 @@ function hesk_notifyCustomer($email_template = 'new_ticket') $changedLanguage = false; //Set the user's language according to the ticket. - if ($ticket['language'] !== NULL) + if (isset($ticket['language']) && $ticket['language'] !== NULL) { hesk_setLanguage($ticket['language']); $changedLanguage = true; @@ -135,10 +135,7 @@ function hesk_notifyCustomer($email_template = 'new_ticket') hesk_mail($ticket['email'], $subject, $message, $htmlMessage, $ccEmails, $bccEmails, $hasMessage); // Reset the language if it was changed - if ($changedLanguage) - { - hesk_resetLanguage(); - } + hesk_resetLanguage(); return true; From 39a49b9cf510e6f7db58c8375969c2a7edd86f97 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 21:31:36 -0400 Subject: [PATCH 06/15] #331 Update recaptchalib --- inc/recaptcha/recaptchalib_v2.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/recaptcha/recaptchalib_v2.php b/inc/recaptcha/recaptchalib_v2.php index 9b035ada..4fdae35f 100755 --- a/inc/recaptcha/recaptchalib_v2.php +++ b/inc/recaptcha/recaptchalib_v2.php @@ -52,7 +52,7 @@ class ReCaptcha * * @param string $secret shared secret between site and ReCAPTCHA server. */ - function ReCaptcha($secret) + function __construct($secret) { if ($secret == null || $secret == "") { die("To use reCAPTCHA you must get an API key from Date: Sat, 29 Aug 2015 22:10:10 -0400 Subject: [PATCH 09/15] Closes #323 Don't add additional line breaks in HTML messages --- admin/edit_post.php | 6 ++++-- reply_ticket.php | 2 +- submit_ticket.php | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/admin/edit_post.php b/admin/edit_post.php index 2a399819..d2cdaf94 100644 --- a/admin/edit_post.php +++ b/admin/edit_post.php @@ -114,8 +114,10 @@ if (isset($_POST['save'])) hesk_error($myerror); } - $tmpvar['message'] = hesk_makeURL($tmpvar['message']); - $tmpvar['message'] = nl2br($tmpvar['message']); + if (!$modsForHesk_settings['rich_text_for_tickets']) { + $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"); } diff --git a/reply_ticket.php b/reply_ticket.php index 435a345b..eaacd090 100644 --- a/reply_ticket.php +++ b/reply_ticket.php @@ -78,7 +78,7 @@ $my_email = hesk_getCustomerEmail(); $message = hesk_input( hesk_POST('message') ); // If the message was entered, further parse it -if ( strlen($message) ) +if ( strlen($message) && !$modsForHesk_settings['rich_text_for_tickets_for_customers'] ) { // Make links clickable $message = hesk_makeURL($message); diff --git a/submit_ticket.php b/submit_ticket.php index 5eedc331..3b10688f 100644 --- a/submit_ticket.php +++ b/submit_ticket.php @@ -412,8 +412,10 @@ if (count($hesk_error_buffer)) hesk_process_messages($hesk_error_buffer, 'index.php?a=add'); } -$tmpvar['message']=hesk_makeURL($tmpvar['message']); -$tmpvar['message']=nl2br($tmpvar['message']); +if (!$modsForHesk_settings['rich_text_for_tickets_for_customers']) { + $tmpvar['message']=hesk_makeURL($tmpvar['message']); + $tmpvar['message']=nl2br($tmpvar['message']); +} // Track suggested knowledgebase articles if ($hesk_settings['kb_enable'] && $hesk_settings['kb_recommendanswers'] && isset($_POST['suggested']) && is_array($_POST['suggested']) ) From 8c3324ead691b636eacbf77af5b39e90a49cffcc Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sat, 29 Aug 2015 22:26:44 -0400 Subject: [PATCH 10/15] #334 Fix escaping on ticket templates page --- admin/manage_ticket_templates.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/admin/manage_ticket_templates.php b/admin/manage_ticket_templates.php index 8ff7d655..caa31ae0 100644 --- a/admin/manage_ticket_templates.php +++ b/admin/manage_ticket_templates.php @@ -133,7 +133,9 @@ $num = hesk_dbNumRows($result); $options .= '>'.$mysaved['title'].''; if ($modsForHesk_settings['rich_text_for_tickets']) { - $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", html_entity_decode($mysaved['message'] ))."';\n"; + $theMessage = html_entity_decode($mysaved['message']); + $theMessage = addslashes($theMessage); + $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", $theMessage)."';\n"; } else { $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", addslashes($mysaved['message']) )."';\n"; } From 63f0199f9ea1450290fd2106ef1ab18599a2e2bb Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 30 Aug 2015 12:03:43 -0400 Subject: [PATCH 11/15] #334 Properly escape quotes in canned responses/ticket templates --- admin/admin_ticket.php | 4 +++- admin/manage_canned.php | 4 +++- admin/new_ticket.php | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/admin/admin_ticket.php b/admin/admin_ticket.php index 35aca09b..6023d5a0 100644 --- a/admin/admin_ticket.php +++ b/admin/admin_ticket.php @@ -1973,7 +1973,9 @@ function hesk_printCanned() { $can_options .= '\n"; if ($modsForHesk_settings['rich_text_for_tickets']) { - echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", hesk_html_entity_decode($mysaved[2]))."';\n"; + $theMessage = hesk_html_entity_decode($mysaved[2]); + $theMessage = addslashes($theMessage); + echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", $theMessage)."';\n"; } else { echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", addslashes($mysaved[2]))."';\n"; } diff --git a/admin/manage_canned.php b/admin/manage_canned.php index 19c38d66..b851c67a 100644 --- a/admin/manage_canned.php +++ b/admin/manage_canned.php @@ -161,7 +161,9 @@ function hesk_insertAtCursor(myField, myValue) { $javascript_titles.='myTitle['.$mysaved['id'].']=\''.addslashes($mysaved['title'])."';\n"; if ($modsForHesk_settings['rich_text_for_tickets']) { - $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", hesk_html_entity_decode($mysaved['message']) )."';\n"; + $theMessage = hesk_html_entity_decode($mysaved['message']); + $theMessage = addslashes($theMessage); + $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", $theMessage )."';\n"; } else { $javascript_messages.='myMsgTxt['.$mysaved['id'].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", addslashes($mysaved['message']) )."';\n"; } diff --git a/admin/new_ticket.php b/admin/new_ticket.php index 6b266304..b50c7b41 100644 --- a/admin/new_ticket.php +++ b/admin/new_ticket.php @@ -572,7 +572,9 @@ if (!$show['show']) { { $can_options .= '\n"; if ($modsForHesk_settings['rich_text_for_tickets']) { - echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", hesk_html_entity_decode($mysaved[2]))."';\n"; + $theMessage = hesk_html_entity_decode($mysaved[2]); + $theMessage = addslashes($theMessage); + echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", $theMessage)."';\n"; } else { echo 'myMsgTxt['.$mysaved[0].']=\''.str_replace("\r\n","\\r\\n' + \r\n'", addslashes($mysaved[2]))."';\n"; } From 6cbd9e7913f7796a6141cc9e9f4993d8d24d7793 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Sun, 30 Aug 2015 22:07:41 -0400 Subject: [PATCH 12/15] Update installer --- install/install_functions.inc.php | 2 +- .../ajax/install-database-ajax.php | 2 ++ install/mods-for-hesk/installModsForHesk.php | 6 ++++ install/mods-for-hesk/js/version-scripts.js | 3 ++ install/mods-for-hesk/modsForHesk.php | 35 ++++++++++++------- install/mods-for-hesk/sql/installSql.php | 10 ++++++ 6 files changed, 45 insertions(+), 13 deletions(-) diff --git a/install/install_functions.inc.php b/install/install_functions.inc.php index da8d961a..e1e85b76 100644 --- a/install/install_functions.inc.php +++ b/install/install_functions.inc.php @@ -37,7 +37,7 @@ if (!defined('IN_SCRIPT')) {die('Invalid attempt');} // We will be installing this HESK version: define('HESK_NEW_VERSION','2.6.5'); -define('MODS_FOR_HESK_NEW_VERSION','2.4.1'); +define('MODS_FOR_HESK_NEW_VERSION','2.4.2'); define('REQUIRE_PHP_VERSION','5.0.0'); define('REQUIRE_MYSQL_VERSION','5.0.7'); diff --git a/install/mods-for-hesk/ajax/install-database-ajax.php b/install/mods-for-hesk/ajax/install-database-ajax.php index c401bf4f..dd4a913a 100644 --- a/install/mods-for-hesk/ajax/install-database-ajax.php +++ b/install/mods-for-hesk/ajax/install-database-ajax.php @@ -51,6 +51,8 @@ if ($version == 1) { } elseif ($version == 241) { execute241Scripts(); execute241FileUpdate(); +} elseif ($version == 242) { + execute242Scripts(); } else { $response = 'The version "'.$version.'" was not recognized. Check the value submitted and try again.'; print $response; diff --git a/install/mods-for-hesk/installModsForHesk.php b/install/mods-for-hesk/installModsForHesk.php index ac5ff53d..3aeabd36 100644 --- a/install/mods-for-hesk/installModsForHesk.php +++ b/install/mods-for-hesk/installModsForHesk.php @@ -61,6 +61,12 @@ function echoInitialVersionRows($version) { if ($version < 240) { printRow('v2.4.0'); } + if ($version < 241) { + printRow('v2.4.1'); + } + if ($version < 242) { + printRow('v2.4.2'); + } } function printRow($version) { diff --git a/install/mods-for-hesk/js/version-scripts.js b/install/mods-for-hesk/js/version-scripts.js index d235b9e4..4abe53bb 100644 --- a/install/mods-for-hesk/js/version-scripts.js +++ b/install/mods-for-hesk/js/version-scripts.js @@ -53,6 +53,9 @@ function processUpdates(startingVersion) { } else if (startingVersion < 241) { startVersionUpgrade('241'); executeUpdate(241, '241', '2.4.1'); + } else if (startingVersion < 242) { + startVersionUpgrade('242'); + executeUpdate(242, '242', '2.4.2'); } else { installationFinished(); } diff --git a/install/mods-for-hesk/modsForHesk.php b/install/mods-for-hesk/modsForHesk.php index 9f9e90c8..33b658b6 100644 --- a/install/mods-for-hesk/modsForHesk.php +++ b/install/mods-for-hesk/modsForHesk.php @@ -137,6 +137,17 @@ hesk_dbConnect(); } ?> +
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
- v1.4.0 -

+
+ v1.4.0 +
diff --git a/install/mods-for-hesk/sql/installSql.php b/install/mods-for-hesk/sql/installSql.php index 226575e9..8d477b71 100644 --- a/install/mods-for-hesk/sql/installSql.php +++ b/install/mods-for-hesk/sql/installSql.php @@ -676,4 +676,14 @@ $modsForHesk_settings[\'rich_text_for_tickets_for_customers\'] = 0;'; } return file_put_contents(HESK_PATH.'modsForHesk_settings.inc.php', $file); +} +// END Version 2.4.1 + +// Version 2.4.2 +function execute242Scripts() { + global $hesk_settings; + + hesk_dbConnect(); + + executeQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."settings` SET `Value` = '2.4.2' WHERE `Key` = 'modsForHeskVersion'"); } \ No newline at end of file From f38bff6e0c7baadb70bd08f3e18d1a3c7be4c142 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Mon, 31 Aug 2015 07:57:24 -0400 Subject: [PATCH 13/15] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd837659..7e8aab45 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/mkoch227/Mods-for-HESK/blob/master/LICENSE) [![Join the chat at https://gitter.im/mkoch227/Mods-for-HESK](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mkoch227/Mods-for-HESK?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Mods for HESK is a set of modifications for [HESK](http://www.hesk.com) v2.6.4, a free and popular helpdesk solution. +Mods for HESK is a set of modifications for [HESK](http://www.hesk.com) v2.6.5, a free and popular helpdesk solution. ## Features From 28db16119ba3a098b2b0d1e1eb133538412e91f6 Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Wed, 2 Sep 2015 13:27:03 -0400 Subject: [PATCH 14/15] Add some more badges --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e8aab45..395373ba 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## [Mods for HESK](http://mods-for-hesk.mkochcs.com) [![Current Release](https://img.shields.io/github/release/mkoch227/Mods-for-HESK.svg)](https://www.github.com/mkoch227/Mods-for-HESK/releases) [![Project Status](http://stillmaintained.com/mkoch227/Mods-for-HESK.png)](https://www.github.com/mkoch227/Mods-for-HESK) +## [Mods for HESK](http://mods-for-hesk.mkochcs.com) [![Number of Downloads](https://img.shields.io/github/downloads/mkoch227/Mods-for-HESK/latest/total.svg)] [![Open Issues](https://img.shields.io/github/issues-raw/mkoch227/Mods-for-HESK.svg)] [![Current Release](https://img.shields.io/github/release/mkoch227/Mods-for-HESK.svg)](https://www.github.com/mkoch227/Mods-for-HESK/releases) [![Project Status](http://stillmaintained.com/mkoch227/Mods-for-HESK.png)](https://www.github.com/mkoch227/Mods-for-HESK) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/mkoch227/Mods-for-HESK/blob/master/LICENSE) [![Join the chat at https://gitter.im/mkoch227/Mods-for-HESK](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mkoch227/Mods-for-HESK?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) From 3220f6d29943a62dd10c38ef6cca7b3d34680e7f Mon Sep 17 00:00:00 2001 From: Mike Koch Date: Wed, 2 Sep 2015 13:28:48 -0400 Subject: [PATCH 15/15] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 395373ba..fc68f220 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## [Mods for HESK](http://mods-for-hesk.mkochcs.com) [![Number of Downloads](https://img.shields.io/github/downloads/mkoch227/Mods-for-HESK/latest/total.svg)] [![Open Issues](https://img.shields.io/github/issues-raw/mkoch227/Mods-for-HESK.svg)] [![Current Release](https://img.shields.io/github/release/mkoch227/Mods-for-HESK.svg)](https://www.github.com/mkoch227/Mods-for-HESK/releases) [![Project Status](http://stillmaintained.com/mkoch227/Mods-for-HESK.png)](https://www.github.com/mkoch227/Mods-for-HESK) +## [Mods for HESK](http://mods-for-hesk.mkochcs.com) [![Number of Downloads](https://img.shields.io/github/downloads/mkoch227/Mods-for-HESK/latest/total.svg)](https://www.github.com/mkoch227/Mods-for-HESK/releases) [![Open Issues](https://img.shields.io/github/issues-raw/mkoch227/Mods-for-HESK.svg)](https://www.github.com/mkoch227/Mods-for-HESK/issues) [![Current Release](https://img.shields.io/github/release/mkoch227/Mods-for-HESK.svg)](https://www.github.com/mkoch227/Mods-for-HESK/releases) [![Project Status](http://stillmaintained.com/mkoch227/Mods-for-HESK.png)](https://www.github.com/mkoch227/Mods-for-HESK) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/mkoch227/Mods-for-HESK/blob/master/LICENSE) [![Join the chat at https://gitter.im/mkoch227/Mods-for-HESK](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mkoch227/Mods-for-HESK?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)