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`');
}