Update database tables



Please enable a different anti-SPAM measure in HESK settings.'); } ?>

Things to do next:

  1. Delete the /install folder from your server!
     
  2. Login to HESK administration panel and make sure everything works fine.

 

$value) { $value['articles'] = isset($value['articles']) ? $value['articles'] : 0; $value['articles_private'] = isset($value['articles_private']) ? $value['articles_private'] : 0; $value['articles_draft'] = isset($value['articles_draft']) ? $value['articles_draft'] : 0; hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles`={$value['articles']}, `articles_private`={$value['articles_private']}, `articles_draft`={$value['articles_draft']} WHERE `id`='{$catid}'"); // Force order articles $res = hesk_dbQuery("SELECT `id`, `sticky` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `catid`='{$catid}' ORDER BY `sticky` DESC, `art_order` ASC"); $i = 10; $previous_sticky = 1; while ( $article = hesk_dbFetchAssoc($res) ) { if ($previous_sticky != $article['sticky']) { $i = 10; $previous_sticky = $article['sticky']; } hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `art_order`=".intval($i)." WHERE `id`='".intval($article['id'])."'"); $i += 10; } } // Force order categories $res = hesk_dbQuery('SELECT `id`, `parent` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'kb_categories` ORDER BY `parent` ASC, `cat_order` ASC'); $i = 10; while ( $category = hesk_dbFetchAssoc($res) ) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `cat_order`=".intval($i)." WHERE `id`='".intval($category['id'])."'"); $i += 10; } $update_all_next = 1; } // END version 2.4.0 to 2.5.0 // 2.5.1 no changes // 2.5.2 no changes // 2.5.3 no changes // 2.5.4 no changes // 2.5.5 no changes // Upgrade version 2.5.x to 2.6.0 if ($update_all_next || $hesk_settings['update_from'] == '2.5') { // -> Banned emails hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."banned_emails` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `banned_by` smallint(5) unsigned NOT NULL, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `email` (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 "); // -> Banned IPs hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."banned_ips` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `ip_from` int(10) unsigned NOT NULL DEFAULT '0', `ip_to` int(10) unsigned NOT NULL DEFAULT '0', `ip_display` varchar(100) NOT NULL, `banned_by` smallint(5) unsigned NOT NULL, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 "); // -> Reply drafts hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."reply_drafts` ( `owner` smallint(5) unsigned NOT NULL, `ticket` mediumint(8) unsigned NOT NULL, `message` mediumtext CHARACTER SET utf8 NOT NULL, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, KEY `owner` (`owner`), KEY `ticket` (`ticket`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci "); // -> Reset password hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."reset_password` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `user` smallint(5) unsigned NOT NULL, `hash` char(40) NOT NULL, `ip` varchar(45) NOT NULL, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `user` (`user`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "); // -> Service messages hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."service_messages` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `author` smallint(5) unsigned NOT NULL, `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `message` mediumtext COLLATE utf8_unicode_ci NOT NULL, `style` enum('0','1','2','3','4') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', `type` enum('0','1') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0', `order` smallint(5) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `type` (`type`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; "); // -> Ticket templates hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."ticket_templates` ( `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `message` mediumtext COLLATE utf8_unicode_ci NOT NULL, `tpl_order` smallint(5) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci "); // 2.6.0 table changes $sql = array(); $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."mail` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."notes` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."attachments` ADD `type` ENUM( '0', '1' ) NOT NULL DEFAULT '0'"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."categories` ADD `priority` ENUM( '0', '1', '2', '3' ) NOT NULL DEFAULT '3'"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` CHANGE `type` `type` ENUM('0','1') CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0'"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."logins` CHANGE `ip` `ip` VARCHAR(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."notes` ADD `attachments` MEDIUMTEXT NOT NULL"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."pipe_loops` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` CHANGE `rating` `rating` ENUM('1','5') CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL, ADD INDEX(`dt`), ADD INDEX(`staffid`)"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` CHANGE `email` `email` VARCHAR( 1000 ) NOT NULL DEFAULT '', CHANGE `ip` `ip` VARCHAR(45) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', ADD `firstreply` TIMESTAMP NULL DEFAULT NULL AFTER `lastchange`, ADD `closedat` TIMESTAMP NULL DEFAULT NULL AFTER `firstreply`, ADD `articles` VARCHAR(255) NULL DEFAULT NULL AFTER `closedat`, ADD `openedby` MEDIUMINT(8) DEFAULT '0' AFTER `status`, ADD `firstreplyby` SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER `openedby`, ADD `closedby` MEDIUMINT(8) NULL DEFAULT NULL AFTER `firstreplyby`, ADD `replies` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `closedby`, ADD `staffreplies` SMALLINT( 5 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `replies`, ADD INDEX ( `openedby` , `firstreplyby` , `closedby` ), ADD INDEX(`dt`)"; $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."users` CHANGE `signature` `signature` VARCHAR( 1000 ) NOT NULL DEFAULT '', CHANGE `heskprivileges` `heskprivileges` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL, CHANGE `categories` `categories` VARCHAR(500) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', ADD `notify_customer_new` ENUM('0','1') NOT NULL DEFAULT '1' AFTER `autostart`, ADD `notify_customer_reply` ENUM('0','1') NOT NULL DEFAULT '1' AFTER `notify_customer_new`, ADD `show_suggested` ENUM('0','1') NOT NULL DEFAULT '1' AFTER `notify_customer_reply`"; foreach ($sql as $s) { hesk_dbQuery($s); } // ==> Populate new fields where available // Get list of valid ticket categories $cat = array(); $res = hesk_dbQuery("SELECT `id` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."categories`"); while ($row=hesk_dbFetchAssoc($res)) { $cat[]=$row['id']; } // Update tickets $res = hesk_dbQuery("SELECT `id`, `category` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets`"); while ($ticket = hesk_dbFetchAssoc($res) ) { $sql = array(); // Verify that the category is valid if ( ! in_array($ticket['category'], $cat) ) { $sql[] = " `category`=1 "; } // Update number of staff replies $res2 = hesk_dbQuery("SELECT COUNT(*) as `cnt`, (CASE WHEN `staffid` = 0 THEN 0 ELSE 1 END) AS `staffcnt` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `replyto`=".intval($ticket['id'])." GROUP BY `staffcnt`"); $total = 0; $staffreplies = 0; while ( $row = hesk_dbFetchAssoc($res2) ) { $total += $row['cnt']; $staffreplies += ($row['staffcnt'] ? $row['cnt'] : 0); } if ( $total > 0 ) { $sql[] = " `replies`={$total}, `staffreplies`={$staffreplies} "; } // If we have staff replies, find the first one if ( $staffreplies > 0 ) { $res2 = hesk_dbQuery("SELECT `dt`, `staffid` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `replyto`={$ticket['id']} AND `staffid`>0 ORDER BY `id` ASC LIMIT 1"); if ( hesk_dbNumRows($res2) == 1) { $reply = hesk_dbFetchAssoc($res2); $sql[] = " `firstreply`='".hesk_dbEscape($reply['dt'])."', `firstreplyby`={$reply['staffid']} "; } } // Do we need to update the ticket? if ( count($sql) ) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` SET " . implode(',', $sql) . ", `lastchange`=`lastchange` WHERE `id`={$ticket['id']}"); } } $update_all_next = 1; } // END version 2.5.x to 2.6.0 // 2.6.1 no changes // 2.6.2 change `closedby` type for all 2.6.x to be sure if ($hesk_settings['update_from'] == '2.6') { hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` CHANGE `closedby` `closedby` MEDIUMINT(8) NULL DEFAULT NULL"); } // 2.6.3 no changes // 2.6.4 no changes // 2.6.5 no changes // 2.6.6 no changes // 2.6.7 no changes // Updating version 2.6 to 2.7 if ($update_all_next || $hesk_settings['update_from'] == '2.6') { // Delete old export folder $export_dir = HESK_PATH.$hesk_settings['attach_dir'].'/export/'; if (is_dir($export_dir)) { $files = glob($export_dir.'*', GLOB_NOSORT); if (is_array($files)) { array_walk($files, 'hesk_unlink_callable'); } @rmdir($export_dir); } // Delete old __latest.txt file hesk_unlink(HESK_PATH.$hesk_settings['attach_dir'].'/__latest.txt'); // Delete HTMLPurifier cache if (is_dir(HESK_PATH.'inc/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer')) { hesk_rrmdir(HESK_PATH.'inc/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer', true); } $sql = array(); $sql[] = "ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."users` ADD `autoreload` SMALLINT UNSIGNED NOT NULL DEFAULT '0' AFTER `autostart`"; foreach ($sql as $s) { hesk_dbQuery($s); } // Add new custom field columns and make sure all are set to mediumtext $sql = array(); $table = array(); // Is the status column an enum type? (HESK < 2.7.0) If no, don't subtract 1 later on $res = hesk_dbQuery("SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".hesk_dbEscape($hesk_settings['db_name'])."' AND TABLE_NAME = '".hesk_dbEscape($hesk_settings['db_pfix'])."tickets' AND COLUMN_NAME = 'status'"); $adjust_status_column = false; if (hesk_dbResult($res) == 'enum') { $adjust_status_column = true; } // Change the type regardless $sql[] = "CHANGE `status` `status` TINYINT UNSIGNED NOT NULL DEFAULT '0'"; $res = hesk_dbQuery("DESCRIBE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets`"); while($row = hesk_dbFetchAssoc($res)) { $table[$row['Field']] = $row['Type']; } for ($i=1; $i<=50; $i++) { if (isset($table['custom'.$i])) { if (strtolower($table['custom'.$i]) != 'mediumtext') { $sql[] = 'CHANGE `custom'.$i.'` `custom'.$i.'` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL'; } } else { $sql[] = 'ADD `custom'.$i.'` MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL'; } } hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` " . implode(',', $sql)); // A tweak to fix converting enum to int if ($adjust_status_column) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` SET `status`=`status`-1, `lastchange`=`lastchange`"); } // -> Custom fields hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."custom_fields` ( `id` tinyint(3) UNSIGNED NOT NULL, `use` enum('0','1','2') NOT NULL DEFAULT '0', `place` enum('0','1') NOT NULL DEFAULT '0', `type` varchar(20) NOT NULL DEFAULT 'text', `req` enum('0','1','2') NOT NULL DEFAULT '0', `category` text, `name` text, `value` text, `order` smallint(5) UNSIGNED NOT NULL DEFAULT '10', PRIMARY KEY (`id`), KEY `useType` (`use`,`type`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci "); // ---> Insert empty custom fields hesk_dbQuery(" INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."custom_fields` (`id`, `use`, `place`, `type`, `req`, `category`, `name`, `value`, `order`) VALUES (1, '0', '0', 'text', '0', NULL, '', NULL, 1000), (2, '0', '0', 'text', '0', NULL, '', NULL, 1000), (3, '0', '0', 'text', '0', NULL, '', NULL, 1000), (4, '0', '0', 'text', '0', NULL, '', NULL, 1000), (5, '0', '0', 'text', '0', NULL, '', NULL, 1000), (6, '0', '0', 'text', '0', NULL, '', NULL, 1000), (7, '0', '0', 'text', '0', NULL, '', NULL, 1000), (8, '0', '0', 'text', '0', NULL, '', NULL, 1000), (9, '0', '0', 'text', '0', NULL, '', NULL, 1000), (10, '0', '0', 'text', '0', NULL, '', NULL, 1000), (11, '0', '0', 'text', '0', NULL, '', NULL, 1000), (12, '0', '0', 'text', '0', NULL, '', NULL, 1000), (13, '0', '0', 'text', '0', NULL, '', NULL, 1000), (14, '0', '0', 'text', '0', NULL, '', NULL, 1000), (15, '0', '0', 'text', '0', NULL, '', NULL, 1000), (16, '0', '0', 'text', '0', NULL, '', NULL, 1000), (17, '0', '0', 'text', '0', NULL, '', NULL, 1000), (18, '0', '0', 'text', '0', NULL, '', NULL, 1000), (19, '0', '0', 'text', '0', NULL, '', NULL, 1000), (20, '0', '0', 'text', '0', NULL, '', NULL, 1000), (21, '0', '0', 'text', '0', NULL, '', NULL, 1000), (22, '0', '0', 'text', '0', NULL, '', NULL, 1000), (23, '0', '0', 'text', '0', NULL, '', NULL, 1000), (24, '0', '0', 'text', '0', NULL, '', NULL, 1000), (25, '0', '0', 'text', '0', NULL, '', NULL, 1000), (26, '0', '0', 'text', '0', NULL, '', NULL, 1000), (27, '0', '0', 'text', '0', NULL, '', NULL, 1000), (28, '0', '0', 'text', '0', NULL, '', NULL, 1000), (29, '0', '0', 'text', '0', NULL, '', NULL, 1000), (30, '0', '0', 'text', '0', NULL, '', NULL, 1000), (31, '0', '0', 'text', '0', NULL, '', NULL, 1000), (32, '0', '0', 'text', '0', NULL, '', NULL, 1000), (33, '0', '0', 'text', '0', NULL, '', NULL, 1000), (34, '0', '0', 'text', '0', NULL, '', NULL, 1000), (35, '0', '0', 'text', '0', NULL, '', NULL, 1000), (36, '0', '0', 'text', '0', NULL, '', NULL, 1000), (37, '0', '0', 'text', '0', NULL, '', NULL, 1000), (38, '0', '0', 'text', '0', NULL, '', NULL, 1000), (39, '0', '0', 'text', '0', NULL, '', NULL, 1000), (40, '0', '0', 'text', '0', NULL, '', NULL, 1000), (41, '0', '0', 'text', '0', NULL, '', NULL, 1000), (42, '0', '0', 'text', '0', NULL, '', NULL, 1000), (43, '0', '0', 'text', '0', NULL, '', NULL, 1000), (44, '0', '0', 'text', '0', NULL, '', NULL, 1000), (45, '0', '0', 'text', '0', NULL, '', NULL, 1000), (46, '0', '0', 'text', '0', NULL, '', NULL, 1000), (47, '0', '0', 'text', '0', NULL, '', NULL, 1000), (48, '0', '0', 'text', '0', NULL, '', NULL, 1000), (49, '0', '0', 'text', '0', NULL, '', NULL, 1000), (50, '0', '0', 'text', '0', NULL, '', NULL, 1000) "); // ---> Update custom fields with current values if (isset($hesk_settings['custom_fields'])) { foreach ($hesk_settings['custom_fields'] as $k => $v) { if ( ! $v['use']) { continue; } $cf = array(); // ID $id = intval(str_replace('custom', '', $k)); // Name $cf['names'][$hesk_settings['language']] = $v['name']; $cf['names'] = addslashes(json_encode($cf['names'])); // Type and value $cf['type'] = $v['type']; switch ($cf['type']) { case 'textarea': $size = explode('#',$v['value']); $cf['rows'] = empty($size[0]) ? 5 : intval($size[0]); $cf['cols'] = empty($size[1]) ? 30 : intval($size[1]); $cf['value'] = array('rows' => $cf['rows'], 'cols' => $cf['cols']); break; case 'radio': $options = explode('#HESK#',$v['value']); $cf['value'] = array('radio_options' => $options); break; case 'select': $v['value'] = str_replace('{HESK_SELECT}', '', $v['value'], $num); $options = explode('#HESK#',$v['value']); $cf['value'] = array('show_select' => ($num ? 1 : 0), 'select_options' => $options); break; case 'checkbox': $options = explode('#HESK#',$v['value']); $cf['value'] = array('checkbox_options' => $options); break; default: $cf['type'] = 'text'; $cf['max_length'] = intval($v['maxlen']); $cf['default_value'] = $v['value']; $cf['value'] = array('max_length' => $cf['max_length'], 'default_value' => $cf['default_value']); } $cf['value'] = addslashes(json_encode($cf['value'])); // Update custom_fields table with this field settings hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."custom_fields` SET `use` = '1', `place` = '".($v['place'] ? '1' : '0')."', `type` = '{$cf['type']}', `req` = '".($v['req'] ? '1' : '0')."', `name` = '".hesk_dbEscape($cf['names'])."', `value` = ".(strlen($cf['value']) ? "'".hesk_dbEscape($cf['value'])."'" : 'NULL')." WHERE `id`={$id}"); } } // -> Custom statuses hesk_dbQuery(" CREATE TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."custom_statuses` ( `id` tinyint(3) UNSIGNED NOT NULL, `name` text NOT NULL, `color` varchar(6) NOT NULL, `can_customers_change` enum('0','1') NOT NULL DEFAULT '1', `order` smallint(5) UNSIGNED NOT NULL DEFAULT '10', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci "); // Update staff with new permissions (allowed by default) hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."users` SET `heskprivileges`=CONCAT(`heskprivileges`,',can_resolve,can_submit_any_cat') WHERE `isadmin` = '0' AND `heskprivileges` LIKE '%can_reply_tickets%' "); $update_all_next = 1; } // END version 2.6 to 2.7 // Updating version 2.7 to 2.8 if ($update_all_next || $hesk_settings['update_from'] == '2.7') { // Modify tickets table hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` ADD `assignedby` MEDIUMINT NULL DEFAULT NULL AFTER `owner`, ADD INDEX (`assignedby`)"); $update_all_next = 1; } // END version 2.7 to 2.8 // Updating 2.8 to 2.8.2 if ($update_all_next || $hesk_settings['update_from'] == '2.8') { // Modify service_messages table hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."service_messages` ADD `language` VARCHAR(50) NULL DEFAULT NULL AFTER `message`"); $update_all_next = 1; } // END version 2.8 to 2.8.2 // Updating 2.8.2 to 2.8.3 if ($update_all_next || $hesk_settings['update_from'] == '2.8.2') { // Modify tickets table hesk_dbQuery("ALTER TABLE `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` CHANGE `name` `name` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '', CHANGE `subject` `subject` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT ''"); $update_all_next = 1; } // END version 2.8.2 to 2.8.3 // 2.8.4 no changes // 2.8.5 no changes // 3.0.0 no changes // 3.0.1 no changes // 3.0.2 no changes // 3.0.3 no changes // 3.1.0 no changes // 3.1.1 no changes // 3.1.2 no changes // Insert the "HESK updated to latest version" mail for the administrator if ( file_exists(HESK_PATH.'hesk_license.php') ) { hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."mail` (`id`, `from`, `to`, `subject`, `message`, `dt`, `read`, `deletedby`) VALUES (NULL, 9999, 1, 'HESK updated to version ".HESK_NEW_VERSION."', '".hesk_dbEscape("

\r\n\r\n

 
Congratulations, your HESK has been successfully updated.

\r\n\r\n

Before you go, let me invite you to:
 

\r\n\r\n
\r\n#1: help us improve\r\n
\r\n

You can suggest what features should be added to HESK by posting them here.

\r\n\r\n \r\n\r\n
\r\n#2: stay updated\r\n
\r\n

HESK regularly receives improvements and bug fixes, make sure you know about them!

\r\n\r\n\r\n

 

\r\n\r\n

Best regards,

\r\n\r\n

Klemen Stirn
\r\nAuthor and owner

\r\n\r\n

")."', NOW(), '0', 9999)"); } else { hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."mail` (`id`, `from`, `to`, `subject`, `message`, `dt`, `read`, `deletedby`) VALUES (NULL, 9999, 1, 'HESK updated to version ".HESK_NEW_VERSION."', '".hesk_dbEscape("

\r\n\r\n

 
Congratulations, your HESK has been successfully updated.

\r\n\r\n

Before you go, let me invite you to:
 

\r\n\r\n
\r\n#1: help us improve\r\n
\r\n

You can suggest what features should be added to HESK by posting them here.

\r\n\r\n \r\n\r\n
\r\n#2: stay updated\r\n
\r\n

HESK regularly receives improvements and bug fixes, make sure you know about them!

\r\n\r\n\r\n \r\n\r\n
\r\n#3: look professional\r\n
\r\n

To look more professional and not advertise the tools you use, remove "Powered by" links from your help desk.

\r\n\r\n

 

\r\n\r\n

Best regards,

\r\n\r\n

Klemen Stirn
\r\nAuthor and owner

\r\n\r\n

")."', NOW(), '0', 9999)"); } return true; } // End hesk_iUpdateTables() function hesk_iSaveSettings() { global $hesk_settings, $hesklang; // Get default settings $hesk_default = hesk_defaultSettings(); // Set a new version number $hesk_settings['hesk_version'] = HESK_NEW_VERSION; // Correct typos in variable names before 2.4 if ( isset($hesk_settings['stmp_host_port']) ) { $hesk_settings['smtp_host_port'] = isset($hesk_settings['stmp_host_port']) ? $hesk_settings['stmp_host_port'] : 25; $hesk_settings['smtp_timeout'] = isset($hesk_settings['stmp_timeout']) ? $hesk_settings['stmp_timeout'] : 10; $hesk_settings['smtp_user'] = isset($hesk_settings['stmp_user']) ? $hesk_settings['stmp_user'] : ''; $hesk_settings['smtp_password'] = isset($hesk_settings['stmp_password']) ? $hesk_settings['stmp_password'] : ''; } // Assign all required values foreach ($hesk_default as $k => $v) { if (is_array($v)) { // Arrays will be processed separately continue; } if ( ! isset($hesk_settings[$k])) { $hesk_settings[$k] = $v; } } // Arrays need special care $hesk_settings['attachments'] = isset($hesk_settings['attachments']) ? $hesk_settings['attachments'] : $hesk_default['attachments']; $hesk_settings['email_providers'] = isset($hesk_settings['email_providers']) ? array_unique(array_merge($hesk_settings['email_providers'], $hesk_default['email_providers'])) : $hesk_default['email_providers']; $hesk_settings['notify_spam_tags'] = isset($hesk_settings['notify_spam_tags']) ? $hesk_settings['notify_spam_tags'] : $hesk_default['notify_spam_tags']; $hesk_settings['ticket_list'] = isset($hesk_settings['ticket_list']) ? $hesk_settings['ticket_list'] : $hesk_default['ticket_list']; // Attachments max size must be multiplied by 1024 since version 2.4 if ($hesk_settings['attachments']['max_size'] < 102400) { $hesk_settings['attachments']['max_size'] = $hesk_settings['attachments']['max_size'] * 1024; } // Encode and escape characters $set = $hesk_settings; foreach ($hesk_settings as $k=> $v) { if (is_array($v) || is_object($v)) { continue; } $set[$k] = addslashes($v); } $set['debug_mode'] = 0; $set['email_providers'] = count($hesk_settings['email_providers']) ? "'" . implode("','", $hesk_settings['email_providers']) . "'" : ''; $set['notify_spam_tags'] = count($hesk_settings['notify_spam_tags']) ? "'" . implode("','", $hesk_settings['notify_spam_tags']) . "'" : ''; $set['ip_whois'] = str_replace('http://whois.domaintools.com', 'https://whois.domaintools.com', $set['ip_whois']); // Check if PHP version is 5.2.3+ and MySQL is 5.0.7+ $set['db_vrsn'] = (version_compare(PHP_VERSION, '5.2.3') >= 0) ? 1 : 0; // reCaptcha v1 has been removed in 2.8, disable it if ($set['recaptcha_use'] == 1 && version_compare($hesk_settings['update_from'], '2.8', '<')) { $set['recaptcha_use'] = 0; define('RECAPTCHA_V1', true); } hesk_iSaveSettingsFile($set); return true; } // End hesk_iSaveSettings() function hesk_defaultSettings() { $spam_question = hesk_generate_SPAM_question(); $secimg_sum = ''; for ($i=1;$i<=10;$i++) { $secimg_sum .= substr('AEUYBDGHJLMNPQRSTVWXZ123456789', rand(0,29), 1); } // --> General settings $hesk_settings['site_title']='Website'; $hesk_settings['site_url']='http://www.example.com'; $hesk_settings['webmaster_mail']='support@example.com'; $hesk_settings['noreply_mail']='noreply@example.com'; $hesk_settings['noreply_name']='Help Desk'; $hesk_settings['site_theme']='hesk3'; // --> Language settings $hesk_settings['can_sel_lang']=0; $hesk_settings['language']='English'; $hesk_settings['languages']=array( 'English' => array('folder'=>'en','hr'=>'------ Reply above this line ------'), ); // --> Database settings $hesk_settings['db_host']='localhost'; $hesk_settings['db_name']='hesk'; $hesk_settings['db_user']='test'; $hesk_settings['db_pass']='test'; $hesk_settings['db_pfix']='hesk_'; $hesk_settings['db_vrsn']=0; // ==> HELP DESK // --> Help desk settings $hesk_settings['hesk_title']='Help Desk'; $hesk_settings['hesk_url']='http://www.example.com/helpdesk'; $hesk_settings['admin_dir']='admin'; $hesk_settings['attach_dir']='attachments'; $hesk_settings['cache_dir']='cache'; $hesk_settings['max_listings']=20; $hesk_settings['print_font_size']=12; $hesk_settings['autoclose']=0; $hesk_settings['max_open']=0; $hesk_settings['new_top']=0; $hesk_settings['reply_top']=0; $hesk_settings['hide_replies']=-1; $hesk_settings['limit_width']=800; // --> Features $hesk_settings['autologin']=1; $hesk_settings['autoassign']=1; $hesk_settings['require_email']=1; $hesk_settings['require_owner']=0; $hesk_settings['require_subject']=1; $hesk_settings['require_message']=1; $hesk_settings['custclose']=1; $hesk_settings['custopen']=1; $hesk_settings['rating']=1; $hesk_settings['cust_urgency']=1; $hesk_settings['sequential']=1; $hesk_settings['time_worked']=1; $hesk_settings['spam_notice']=1; $hesk_settings['list_users']=0; $hesk_settings['debug_mode']=0; $hesk_settings['short_link']=0; $hesk_settings['select_cat']=0; $hesk_settings['select_pri']=0; $hesk_settings['cat_show_select']=15; // --> SPAM Prevention $hesk_settings['secimg_use']=1; $hesk_settings['secimg_sum']=$secimg_sum; $hesk_settings['recaptcha_use']=0; $hesk_settings['recaptcha_public_key']=''; $hesk_settings['recaptcha_private_key']=''; $hesk_settings['question_use']=0; $hesk_settings['question_ask']=$spam_question[0]; $hesk_settings['question_ans']=$spam_question[1]; // --> Security $hesk_settings['attempt_limit']=6; $hesk_settings['attempt_banmin']=60; $hesk_settings['reset_pass']=1; $hesk_settings['email_view_ticket']=1; $hesk_settings['x_frame_opt']=1; $hesk_settings['force_ssl']=0; // --> Attachments $hesk_settings['attachments']=array ( 'use' => 1, 'max_number' => 2, 'max_size' => 2097152, 'allowed_types' => array('.gif','.jpg','.png','.zip','.rar','.csv','.doc','.docx','.xls','.xlsx','.txt','.pdf') ); // ==> KNOWLEDGEBASE // --> Knowledgebase settings $hesk_settings['kb_enable']=1; $hesk_settings['kb_wysiwyg']=1; $hesk_settings['kb_search']=2; $hesk_settings['kb_search_limit']=10; $hesk_settings['kb_views']=0; $hesk_settings['kb_date']=0; $hesk_settings['kb_recommendanswers']=1; $hesk_settings['kb_rating']=1; $hesk_settings['kb_substrart']=200; $hesk_settings['kb_cols']=2; $hesk_settings['kb_numshow']=3; $hesk_settings['kb_popart']=6; $hesk_settings['kb_latest']=6; $hesk_settings['kb_index_popart']=6; $hesk_settings['kb_index_latest']=0; $hesk_settings['kb_related']=5; // ==> EMAIL // --> Email sending $hesk_settings['smtp']=0; $hesk_settings['smtp_host_name']='mail.example.com'; $hesk_settings['smtp_host_port']=25; $hesk_settings['smtp_timeout']=10; $hesk_settings['smtp_ssl']=0; $hesk_settings['smtp_tls']=0; $hesk_settings['smtp_user']=''; $hesk_settings['smtp_password']=''; // --> Email piping $hesk_settings['email_piping']=0; // --> POP3 Fetching $hesk_settings['pop3']=0; $hesk_settings['pop3_job_wait']=15; $hesk_settings['pop3_host_name']='mail.example.com'; $hesk_settings['pop3_host_port']=110; $hesk_settings['pop3_tls']=0; $hesk_settings['pop3_keep']=0; $hesk_settings['pop3_user']=''; $hesk_settings['pop3_password']=''; // --> IMAP Fetching $hesk_settings['imap']=0; $hesk_settings['imap_job_wait']=15; $hesk_settings['imap_host_name']='mail.example.com'; $hesk_settings['imap_host_port']=993; $hesk_settings['imap_enc']='ssl'; $hesk_settings['imap_keep']=0; $hesk_settings['imap_user']=''; $hesk_settings['imap_password']=''; // --> Email loops $hesk_settings['loop_hits']=6; $hesk_settings['loop_time']=300; // --> Detect email typos $hesk_settings['detect_typos']=1; $hesk_settings['email_providers']=array('aim.com','aol.co.uk','aol.com','att.net','bellsouth.net','blueyonder.co.uk','bt.com','btinternet.com','btopenworld.com','charter.net','comcast.net','cox.net','earthlink.net','email.com','facebook.com','fastmail.fm','free.fr','freeserve.co.uk','gmail.com','gmx.at','gmx.ch','gmx.com','gmx.de','gmx.fr','gmx.net','gmx.us','googlemail.com','hotmail.be','hotmail.co.uk','hotmail.com','hotmail.com.ar','hotmail.com.mx','hotmail.de','hotmail.es','hotmail.fr','hushmail.com','icloud.com','inbox.com','laposte.net','lavabit.com','list.ru','live.be','live.co.uk','live.com','live.com.ar','live.com.mx','live.de','live.fr','love.com','lycos.com','mac.com','mail.com','mail.ru','me.com','msn.com','nate.com','naver.com','neuf.fr','ntlworld.com','o2.co.uk','online.de','orange.fr','orange.net','outlook.com','pobox.com','prodigy.net.mx','qq.com','rambler.ru','rocketmail.com','safe-mail.net','sbcglobal.net','t-online.de','talktalk.co.uk','tiscali.co.uk','verizon.net','virgin.net','virginmedia.com','wanadoo.co.uk','wanadoo.fr','yahoo.co.id','yahoo.co.in','yahoo.co.jp','yahoo.co.kr','yahoo.co.uk','yahoo.com','yahoo.com.ar','yahoo.com.mx','yahoo.com.ph','yahoo.com.sg','yahoo.de','yahoo.fr','yandex.com','yandex.ru','ymail.com'); // --> Notify customer when $hesk_settings['notify_new']=1; $hesk_settings['notify_skip_spam']=1; $hesk_settings['notify_spam_tags']=array('Spam?}','***SPAM***','[SPAM]','SPAM-LOW:','SPAM-MED:'); $hesk_settings['notify_closed']=1; // --> Other $hesk_settings['strip_quoted']=1; $hesk_settings['eml_req_msg']=0; $hesk_settings['save_embedded']=1; $hesk_settings['multi_eml']=0; $hesk_settings['confirm_email']=0; $hesk_settings['open_only']=1; // ==> TICKET LIST $hesk_settings['ticket_list']=array('trackid','lastchange','name','subject','status','lastreplier'); // --> Other $hesk_settings['submittedformat']=2; $hesk_settings['updatedformat']=2; // ==> MISC // --> Date & Time $hesk_settings['timezone']=date_default_timezone_get(); $hesk_settings['timeformat']='Y-m-d H:i:s'; $hesk_settings['time_display']=1; // --> Other $hesk_settings['ip_whois']='https://whois.domaintools.com/{IP}'; $hesk_settings['maintenance_mode']=0; $hesk_settings['alink']=1; $hesk_settings['submit_notice']=0; $hesk_settings['online']=0; $hesk_settings['online_min']=10; $hesk_settings['check_updates']=1; return $hesk_settings; } // END hesk_defaultSettings() function hesk_iDetectVersion() { global $hesk_settings, $hesklang; // Version 2.8.3 tables installed? $res = hesk_dbQuery("SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '".hesk_dbEscape($hesk_settings['db_pfix'])."tickets' AND table_schema = '".hesk_dbEscape($hesk_settings['db_name'])."' AND column_name = 'name' LIMIT 0, 1"); $row = hesk_dbFetchRow($res); if ($row[0] == 255) { return '2.8.3'; } // Version 2.8.2 tables installed? $res = hesk_dbQuery("SHOW TABLES FROM `".hesk_dbEscape($hesk_settings['db_name'])."` LIKE '".hesk_dbEscape($hesk_settings['db_pfix'])."service_messages'"); if (hesk_dbNumRows($res)) { $res = hesk_dbQuery("SHOW COLUMNS FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."service_messages` LIKE 'language'"); if (hesk_dbNumRows($res)) { return '2.8.2'; } } // Version 2.8 tables installed? $res = hesk_dbQuery("SHOW COLUMNS FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` LIKE 'assignedby'"); if (hesk_dbNumRows($res)) { return '2.8'; } // Get a list of tables from the database $tables = array(); $res = hesk_dbQuery('SHOW TABLES FROM `'.hesk_dbEscape($hesk_settings['db_name']).'`'); while ($row = hesk_dbFetchRow($res)) { $tables[] = $row[0]; } // Version 2.7 tables installed? if ( in_array($hesk_settings['db_pfix'].'custom_fields', $tables) || in_array($hesk_settings['db_pfix'].'custom_statuses', $tables) ) { return '2.7'; } // Version 2.6 tables installed? if ( in_array($hesk_settings['db_pfix'].'banned_emails', $tables) || in_array($hesk_settings['db_pfix'].'banned_ips', $tables) || in_array($hesk_settings['db_pfix'].'reply_drafts', $tables) || in_array($hesk_settings['db_pfix'].'reset_password', $tables) || in_array($hesk_settings['db_pfix'].'service_messages', $tables) || in_array($hesk_settings['db_pfix'].'ticket_templates', $tables) ) { return '2.6'; } // Version 2.4/2.5 tables installed? elseif (in_array($hesk_settings['db_pfix'].'pipe_loops', $tables)) { // Version 2.4 didn't have articles_private in kb_categories $res = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` WHERE `id`=1 LIMIT 1"); $row = hesk_dbFetchAssoc($res); if (isset($row['articles_private'])) { // This is one of the 2.5.x version // Database is 100% compatible, so let's be safe and return 2.5 return '2.5'; } else { return '2.4'; } } // Version 2.3 tables installed? elseif (in_array($hesk_settings['db_pfix'].'online', $tables) || in_array($hesk_settings['db_pfix'].'logins', $tables)) { return '2.3'; } // Version 2.2 tables installed? elseif (in_array($hesk_settings['db_pfix'].'mail', $tables)) { return '2.2'; } // Version 2.1 tables installed? elseif (in_array($hesk_settings['db_pfix'].'kb_attachments', $tables)) { return '2.1'; } // Version 2.0 tables installed? elseif (in_array($hesk_settings['db_pfix'].'kb_articles', $tables)) { return '2.0'; } // Version 0.94.1 tables installed? elseif (in_array('hesk_attachments', $tables)) { return '0.94.1'; } // Version 0.94 tables installed? elseif (in_array('hesk_std_replies', $tables)) { return '0.94'; } // It's a version older than 0.94 or no tables found else { // If we don't have four basic tables this is not a valid HESK install if ( ! in_array('hesk_categories', $tables) || ! in_array('hesk_replies', $tables) || ! in_array('hesk_tickets', $tables) || ! in_array('hesk_users', $tables) ) { hesk_iDatabase(3); } // Version 0.90 didn't have the notify column in users table $res = hesk_dbQuery("SELECT * FROM `hesk_users` WHERE `id`=1 LIMIT 1"); $row = hesk_dbFetchAssoc($res); if (isset($row['notify'])) { return '0.91-0.93.1'; } else { // Wow, we found someone using the very first HESK version :-) return '0.90'; } } } // END hesk_iDetectVersion() ?>