Newer
Older
-- Add a table to contain the attachment file contents
DROP TABLE IF EXISTS `%TABLE_PREFIX%file`;
CREATE TABLE `%TABLE_PREFIX%file` (
`id` int(11) NOT NULL auto_increment,
`type` varchar(255) NOT NULL default '',
`size` varchar(25) NOT NULL default '',
`hash` varchar(125) NOT NULL,
`name` varchar(255) NOT NULL default '',
`filedata` longblob NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `hash` (`hash`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- update ticket attachments ref. table.
ALTER TABLE `%TABLE_PREFIX%ticket_attachment`
CHANGE `ref_type` `ref_type` ENUM( 'M', 'R', 'N' ) NOT NULL DEFAULT 'M',
ADD `file_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `ticket_id`,
ADD INDEX ( `file_id` );
-- Add Team ID and 'API' as a valid ticket source
ALTER TABLE `%TABLE_PREFIX%ticket`
ADD `team_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `staff_id`,
ADD INDEX ( `team_id` ),
CHANGE `source` `source` ENUM(
'Web', 'Email', 'Phone', 'API', 'Other') NOT NULL DEFAULT 'Other';
-- Add table for ticket history (statistics) tracking
DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_event`;
CREATE TABLE `%TABLE_PREFIX%ticket_event` (
`ticket_id` int(11) unsigned NOT NULL default '0',
`staff_id` int(11) unsigned NOT NULL,
`team_id` int(11) unsigned NOT NULL,
`dept_id` int(11) unsigned NOT NULL,
`topic_id` int(11) unsigned NOT NULL,
`state` enum('created','closed','reopened','assigned','transferred','overdue') NOT NULL,
`staff` varchar(255) NOT NULL default 'SYSTEM',
`timestamp` datetime NOT NULL,
KEY `ticket_state` (`ticket_id`, `state`, `timestamp`),
KEY `ticket_stats` (`timestamp`, `state`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `%TABLE_PREFIX%config`
ADD `passwd_reset_period` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `staff_session_timeout`,
ADD `default_timezone_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `default_template_id`,
ADD `default_sla_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `default_dept_id`,
CHANGE `spoof_default_smtp` `allow_email_spoofing` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
CHANGE `enable_mail_fetch` `enable_mail_polling` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
ADD `max_user_file_uploads` TINYINT UNSIGNED NOT NULL AFTER `max_file_size`,
ADD `max_staff_file_uploads` TINYINT UNSIGNED NOT NULL AFTER `max_user_file_uploads`,
ADD `assigned_alert_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `overdue_alert_dept_members`,
ADD `assigned_alert_staff` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `assigned_alert_active`,
ADD `assigned_alert_team_lead` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `assigned_alert_staff`,
ADD `assigned_alert_team_members` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `assigned_alert_team_lead`,
ADD `transfer_alert_active` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `note_alert_dept_manager` ,
ADD `transfer_alert_assigned` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `transfer_alert_active` ,
ADD `transfer_alert_dept_manager` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1' AFTER `transfer_alert_assigned` ,
ADD `transfer_alert_dept_members` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `transfer_alert_dept_manager`,
ADD `send_sys_errors` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `enable_email_piping`,
ADD `enable_kb` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `use_email_priority`,
ADD `enable_premade` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `enable_kb`,
ADD `show_related_tickets` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER `auto_assign_reopened_tickets`,
ADD `schema_signature` CHAR( 32 ) NOT NULL AFTER `ostversion`;
-- copy over timezone id - based on offset.
UPDATE `%TABLE_PREFIX%config` SET default_timezone_id =
(SELECT id FROM `%TABLE_PREFIX%timezone` WHERE offset = `%TABLE_PREFIX%config`.timezone_offset);
ALTER TABLE `%TABLE_PREFIX%staff`
ADD `passwdreset` DATETIME NULL DEFAULT NULL AFTER `lastlogin`;
DROP TABLE IF EXISTS `%TABLE_PREFIX%sla`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%sla` (
`id` int(11) unsigned NOT NULL auto_increment,
`isactive` tinyint(1) unsigned NOT NULL default '1',
`enable_priority_escalation` tinyint(1) unsigned NOT NULL default '1',
`disable_overdue_alerts` tinyint(1) unsigned NOT NULL default '0',
`grace_period` int(10) unsigned NOT NULL default '0',
`name` varchar(64) NOT NULL default '',
`notes` text,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM;
-- Create a default SLA
INSERT INTO `%TABLE_PREFIX%sla` (`isactive`, `enable_priority_escalation`,
`disable_overdue_alerts`, `grace_period`, `name`, `notes`, `created`, `updated`)
VALUES (1, 1, 0, 48, 'Default SLA', NULL, NOW(), NOW());
-- Create a TEAM table
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%team` (
`team_id` int(10) unsigned NOT NULL auto_increment,
`lead_id` int(10) unsigned NOT NULL default '0',
`isenabled` tinyint(1) unsigned NOT NULL default '1',
`noalerts` tinyint(1) unsigned NOT NULL default '0',
`name` varchar(125) NOT NULL default '',
`notes` text,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`team_id`),
UNIQUE KEY `name` (`name`),
KEY `isnabled` (`isenabled`),
KEY `lead_id` (`lead_id`)
) ENGINE=MyISAM;
-- Create a default TEAM
INSERT INTO `%TABLE_PREFIX%team` (`lead_id`, `isenabled`, `noalerts`, `name`, `notes`, `created`, `updated`)
VALUES (0, 1, 0, 'Level I Support', '', NOW(), NOW());
DROP TABLE IF EXISTS `%TABLE_PREFIX%team_member`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%team_member` (
`team_id` int(10) unsigned NOT NULL default '0',
`staff_id` int(10) unsigned NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`team_id`,`staff_id`)
) ENGINE=MyISAM;
ALTER TABLE `%TABLE_PREFIX%department`
ADD sla_id INT UNSIGNED NOT NULL DEFAULT '0' AFTER tpl_id;
ALTER TABLE `%TABLE_PREFIX%staff`
ADD `notes` TEXT NULL DEFAULT NULL AFTER `signature`,
ADD `assigned_only` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `onvacation`,
ADD `show_assigned_tickets` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `assigned_only`,
ADD `timezone_id` INT UNSIGNED NOT NULL DEFAULT '0' AFTER `dept_id`,
ADD `default_signature_type` ENUM( 'none', 'mine', 'dept' ) NOT NULL DEFAULT 'none' AFTER `auto_refresh_rate`;
-- Copy over time zone offet to tz_id
UPDATE `%TABLE_PREFIX%staff` SET timezone_id =
(SELECT id FROM `%TABLE_PREFIX%timezone` WHERE offset = `%TABLE_PREFIX%staff`.timezone_offset);
ALTER TABLE `%TABLE_PREFIX%groups`
CHANGE `can_manage_kb` `can_manage_premade` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
ADD `can_manage_faq` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `can_manage_premade`,
ADD `can_assign_tickets` TINYINT( 1 ) UNSIGNED NOT NULL default '1' AFTER `can_close_tickets`,
ADD notes TEXT NULL AFTER can_manage_faq;
-- Add new columns to the templates table
ALTER TABLE `%TABLE_PREFIX%email_template`
ADD `isactive` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `cfg_id`,
ADD `transfer_alert_subj` VARCHAR( 255 ) NOT NULL AFTER `assigned_alert_body`,
ADD `transfer_alert_body` TEXT NOT NULL AFTER `transfer_alert_subj`;
-- Insert default text for the new messaage tpl + make templates active (all records are updated).
UPDATE `%TABLE_PREFIX%email_template` SET updated=NOW() ,isactive=1, transfer_alert_subj='Ticket Transfer #%ticket - %dept',transfer_alert_body='%staff,\r\n\r\nTicket #%ticket has been transferred to %dept department.\r\n\r\n----------------------\r\n\r\n%note\r\n\r\n-------------------\r\n\r\nTo view/respond to the ticket, please login to the support ticket system.\r\n\r\n%url/scp/ticket.php?id=%id\r\n\r\n- Your friendly Customer Support System - powered by osTicket.';
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
ALTER TABLE `%TABLE_PREFIX%help_topic`
ADD ispublic TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' AFTER isactive,
ADD notes TEXT NULL DEFAULT NULL AFTER topic,
ADD staff_id INT UNSIGNED NOT NULL DEFAULT '0' AFTER dept_id,
ADD team_id INT UNSIGNED NOT NULL DEFAULT '0' AFTER staff_id,
ADD sla_id INT UNSIGNED NOT NULL DEFAULT '0' AFTER team_id,
ADD INDEX ( staff_id , team_id ),
ADD INDEX ( sla_id );
ALTER TABLE `%TABLE_PREFIX%email`
ADD mail_archivefolder VARCHAR(255) NULL AFTER mail_fetchmax,
ADD notes TEXT NULL DEFAULT NULL AFTER smtp_auth,
ADD smtp_spoofing TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER smtp_auth;
ALTER TABLE `%TABLE_PREFIX%api_key`
ADD notes TEXT NULL DEFAULT NULL AFTER apikey,
ADD UNIQUE (apikey);
ALTER TABLE `%TABLE_PREFIX%ticket`
ADD sla_id INT UNSIGNED NOT NULL DEFAULT '0' AFTER dept_id,
ADD INDEX ( sla_id );
DROP TABLE IF EXISTS `%TABLE_PREFIX%email_filter`;
CREATE TABLE `%TABLE_PREFIX%email_filter` (
`id` int(11) unsigned NOT NULL auto_increment,
`execorder` int(10) unsigned NOT NULL default '99',
`isactive` tinyint(1) unsigned NOT NULL default '1',
`match_all_rules` tinyint(1) unsigned NOT NULL default '0',
`stop_onmatch` tinyint(1) unsigned NOT NULL default '0',
`reject_email` tinyint(1) unsigned NOT NULL default '0',
`use_replyto_email` tinyint(1) unsigned NOT NULL default '0',
`disable_autoresponder` tinyint(1) unsigned NOT NULL default '0',
`email_id` int(10) unsigned NOT NULL default '0',
`priority_id` int(10) unsigned NOT NULL default '0',
`dept_id` int(10) unsigned NOT NULL default '0',
`staff_id` int(10) unsigned NOT NULL default '0',
`team_id` int(10) unsigned NOT NULL default '0',
`sla_id` int(10) unsigned NOT NULL default '0',
`name` varchar(32) NOT NULL default '',
`notes` text,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `email_id` (`email_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Copy banlist to a new email filter
INSERT INTO `%TABLE_PREFIX%email_filter` (`id`, `execorder`, `isactive`,
`match_all_rules`, `stop_onmatch`, `reject_email`, `use_replyto_email`,
`disable_autoresponder`, `email_id`, `priority_id`, `dept_id`, `staff_id`,
`team_id`, `sla_id`, `name`, `notes`) VALUES
(1, 99, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 'SYSTEM BAN LIST',
'Internal list for email banning. Do not remove');
DROP TABLE IF EXISTS `%TABLE_PREFIX%email_filter_rule`;
CREATE TABLE `%TABLE_PREFIX%email_filter_rule` (
`id` int(11) unsigned NOT NULL auto_increment,
`filter_id` int(10) unsigned NOT NULL default '0',
`what` enum('name','email','subject','body','header') NOT NULL,
`how` enum('equal','not_equal','contains','dn_contain') NOT NULL,
`val` varchar(255) NOT NULL,
`isactive` tinyint( 1 ) UNSIGNED NOT NULL DEFAULT '1',
`notes` tinytext NOT NULL,
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `filter_id` (`filter_id`),
UNIQUE `filter` (`filter_id`, `what`, `how`, `val`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- SYSTEM BAN LIST was the first filter created, with ID of '1'
INSERT INTO `%TABLE_PREFIX%email_filter_rule` (`filter_id`, `what`, `how`, `val`)
SELECT 1, 'email', 'equals', email FROM `%TABLE_PREFIX%email_banlist`;
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
-- Create table session
DROP TABLE IF EXISTS `%TABLE_PREFIX%session`;
CREATE TABLE `%TABLE_PREFIX%session` (
`session_id` varchar(32) collate utf8_unicode_ci NOT NULL default '',
`session_data` longtext collate utf8_unicode_ci,
`session_expire` datetime default NULL,
`session_updated` datetime default NULL,
`user_id` int(10) unsigned NOT NULL default '0',
`user_ip` varchar(32) collate utf8_unicode_ci NOT NULL,
`user_agent` varchar(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`session_id`),
KEY `updated` (`session_updated`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- Create tables for FAQ + attachments.
DROP TABLE IF EXISTS `%TABLE_PREFIX%faq`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%faq` (
`faq_id` int(10) unsigned NOT NULL auto_increment,
`category_id` int(10) unsigned NOT NULL default '0',
`ispublished` tinyint(1) unsigned NOT NULL default '0',
`question` varchar(255) NOT NULL,
`answer` text NOT NULL,
`keywords` tinytext,
`notes` text,
`created` date NOT NULL,
`updated` date NOT NULL,
PRIMARY KEY (`faq_id`),
UNIQUE KEY `question` (`question`),
KEY `category_id` (`category_id`),
KEY `ispublished` (`ispublished`),
FULLTEXT KEY `faq` (`question`,`answer`,`keywords`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `%TABLE_PREFIX%faq_attachment`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%faq_attachment` (
`faq_id` int(10) unsigned NOT NULL,
`file_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`faq_id`,`file_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Add support for attachments to canned responses
DROP TABLE IF EXISTS `%TABLE_PREFIX%canned_attachment`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%canned_attachment` (
`canned_id` int(10) unsigned NOT NULL,
`file_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`canned_id`,`file_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- Rename kb_premade to canned_response
ALTER TABLE `%TABLE_PREFIX%kb_premade`
CHANGE `premade_id` `canned_id` int(10) unsigned NOT NULL auto_increment,
CHANGE `title` `title` VARCHAR( 255 ) NOT NULL DEFAULT '',
CHANGE `answer` `response` TEXT NOT NULL,
ADD `notes` TEXT NOT NULL AFTER `response`,
DROP INDEX `title`,
ADD FULLTEXT `resp` (`title` ,`response`);
ALTER TABLE `%TABLE_PREFIX%kb_premade` RENAME TO `%TABLE_PREFIX%canned_response`;
DROP TABLE IF EXISTS `%TABLE_PREFIX%faq_category`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%faq_category` (
`category_id` int(10) unsigned NOT NULL auto_increment,
`ispublic` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0',
`name` varchar(125) default NULL,
`description` TEXT NOT NULL,
`notes` tinytext NOT NULL,
`created` date NOT NULL,
`updated` date NOT NULL,
PRIMARY KEY (`category_id`),
KEY (`ispublic`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `%TABLE_PREFIX%faq_topic`;
CREATE TABLE IF NOT EXISTS `%TABLE_PREFIX%faq_topic` (
`faq_id` int(10) unsigned NOT NULL,
`topic_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`faq_id`,`topic_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
UPDATE `%TABLE_PREFIX%config`
SET `schema_signature`='7be60a8432e44989e782d5914ef784d2';