How to Upgrade Hesk With Mods For Hesk Installed
Moderator: mkoch227
How to Upgrade Hesk With Mods For Hesk Installed
I had a copy of Hesk 2.6.8 with the latest Mods for Hesk installed. Hesk told me there was an update available so I updated it. That obviously overwrote the Mods for Hesk files. The update worked but put it back to the default look and feel. I then tried to put Hesk 3.0.0 on and tried to upgrade but that didnt work. I then thought ok, Ill unistall mods for hesk and install again, that didnt work either! Gives console Errors? What should be the process for updating Hesk when you have Mods installed as I think i probably did it wrong.
Re: How to Upgrade Hesk With Mods For Hesk Installed
There is no supported upgrade to HESK 2.7.1 at this time, as Mods for HESK 3 is currently in beta. However, if you want to install the beta, this is the path you should follow (assuming you are running HESK 2.6.8 with Mods for HESK 2.6.4):
(Hopefully you have a backup of HESK 2.6.8 + Mods for HESK 2.6.4 so you can be up and running again or to attempt the upgrade again
)
- Download HESK 2.7.1 and extract the files to your helpdesk installation
- Update to HESK 2.7.1 by following the official HESK documentation (after this your helpdesk will look like "classic" HESK and the helpdesk simply won't work properly; this is normal)
- Download Mods for HESK 3.0.0 beta 1 and extract to your helpdesk installation
- Update to Mods for HESK 3.0.0 beta 1 by following the Mods for HESK installation process
(Hopefully you have a backup of HESK 2.6.8 + Mods for HESK 2.6.4 so you can be up and running again or to attempt the upgrade again

Mike, Lead Developer of
HESK: A surprisingly simple, user-friendly and FREE help desk software with integrated knowledgebase.
Re: How to Upgrade Hesk With Mods For Hesk Installed
Stupidly i didn't take an update as we are not really using the system publicly, just teaching our support staff how to use it. I cant remember quite what the issue was but i then tried to uninstall on Mods for Hesk. I tried running it normally but it failed as in my opinion it is not coded very "Helpfully". Uninstall.sql should use DROP TABLE IF EXISTS for ALL the changes, not just the last two because if as in my case, things dont run smoothly, I have to do the whole uninstall manually! I assume the install.sql is the same as on reinstall, there was a left over Mods for Hesk field in one of the table so the install failed so now i have to manually unpick it all again
Should I be reporting this as a bug/improvement somewhere? I am sure others may run into this issue and it can be simply avoided...

Re: How to Upgrade Hesk With Mods For Hesk Installed
I managed to fix it after uninstalling and re installing mods, I ammended the Unistall.sql file so that it is conditional so it always removes everything even if it fails half way through one time. For some reason it only works every other time so refreshing the uninstall page works!! Not perfect but thought it might be of some use to someone? Please excuse my poor knowledge of php and mysql.... Please excuse the repeated bits... just wanted it to work!
Code: Select all
<?php
require(HESK_PATH . 'hesk_settings.inc.php');
function executeQuery($sql)
{
global $hesk_last_query;
global $hesk_db_link;
if (function_exists('mysqli_connect')) {
if (!$hesk_db_link && !hesk_dbConnect()) {
return false;
}
$hesk_last_query = $sql;
if ($res = @mysqli_query($hesk_db_link, $sql)) {
return $res;
} else {
print "Could not execute query: $sql. MySQL said: " . mysqli_error($hesk_db_link);
http_response_code(500);
die();
}
} else {
if (!$hesk_db_link && !hesk_dbConnect()) {
return false;
}
$hesk_last_query = $sql;
if ($res = @mysql_query($sql, $hesk_db_link)) {
return $res;
} else {
print "Could not execute query: $sql. MySQL said: " . mysql_error();
http_response_code(500);
die();
}
}
}
function replaceStatusColumn()
{
global $hesk_settings;
hesk_dbConnect();
executeQuery("DROP PROCEDURE IF EXISTS dropColumnIfExists;");
executeQuery("CREATE PROCEDURE dropColumnIfExists(IN dbName text, IN tableName text, IN fieldName text) Begin IF EXISTS (
SELECT * FROM information_schema.COLUMNS
WHERE column_name=fieldName
and table_name=tableName
and table_schema=dbName
)
THEN
set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
' DROP COLUMN ',fieldName);
prepare stmt from @ddl;
execute stmt;
END IF;
end;");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'status_int');");
executeQuery("ALTER TABLE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` ADD COLUMN `status_int` ENUM('0','1','2','3','4','5') NOT NULL AFTER `status`;");
$ticketsRS = executeQuery("SELECT `id`, `status` FROM `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets`;");
while ($currentResult = hesk_dbFetchAssoc($ticketsRS)) {
executeQuery("UPDATE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` SET `status_int` = '" . intval($currentResult['status']) . "' WHERE `id` = " . $currentResult['id']);
}
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'status');");
executeQuery("ALTER TABLE `" . hesk_dbEscape($hesk_settings['db_pfix']) . "tickets` CHANGE COLUMN `status_int` `status` ENUM('0','1','2','3','4','5') NOT NULL");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "statuses`");
}
function removeOtherColumns()
{
global $hesk_settings;
executeQuery("DROP PROCEDURE IF EXISTS dropColumnIfExists ;");
executeQuery("CREATE PROCEDURE dropColumnIfExists(IN dbName text, IN tableName text, IN fieldName text) Begin IF EXISTS (
SELECT * FROM information_schema.COLUMNS
WHERE column_name=fieldName
and table_name=tableName
and table_schema=dbName
)
THEN
set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
' DROP COLUMN ',fieldName);
prepare stmt from @ddl;
execute stmt;
END IF;
end;");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'autorefresh');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'parent');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'autorefresh');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'active');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'notify_note_unassigned');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'can_change_notification_settings');");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "settings`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "verified_emails`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "pending_verification_emails`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "stage_tickets`");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'service_messages' . "', 'icon');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'latitude');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'longitude');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'latitude');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'longitude');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'categories' . "', 'manager');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'permission_template');");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "permission_templates`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "quick_help_sections`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "text_to_status_xref`");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'attachments' . "', 'download_count');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'kb_attachments' . "', 'download_count');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'html');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'html');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'replies' . "', 'html');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'user_agent');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'screen_resolution_width');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'screen_resolution_height');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'user_agent');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'screen_resolution_width');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'screen_resolution_height');");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "logging`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "user_api_tokens`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "temp_attachment`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event`");
executeQuery("DROP TABLE IF EXISTS `" . hesk_dbEscape($hesk_settings['db_pfix']) . "calendar_event_reminder`");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'due_date');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'tickets' . "', 'overdue_email_sent');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'categories' . "', 'color');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'categories' . "', 'usage');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'notify_overdue_unassigned');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'users' . "', 'default_calendar_view');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'due_date');");
executeQuery("call dropColumnIfExists('" . hesk_dbEscape($hesk_settings['db_name']) . "', '". hesk_dbEscape($hesk_settings['db_pfix']) . 'stage_tickets' . "', 'overdue_email_sent');");
// These queries are ran in case someone used an unfortunate installation they may have not properly cleaned up tables
executeQuery('DROP TABLE IF EXISTS `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'denied_ips`');
executeQuery('DROP TABLE IF EXISTS `' . hesk_dbEscape($hesk_settings['db_pfix']) . 'denied_emails`');
}