Skip to content
Snippets Groups Projects
v1.6st-1.7-upgrade-mysql.sql 13.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jared Hancock's avatar
    Jared Hancock committed
    -- 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_history`;
    CREATE TABLE `%TABLE_PREFIX%ticket_history` (
      `ticket_id` int(11) unsigned NOT NULL default '0',
      `state` enum('opened','closed','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 '1' 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`;
    
    ALTER TABLE `%TABLE_PREFIX%staff` 
        ADD `passwdreset` DATETIME NULL DEFAULT NULL AFTER `lastlogin`;
    
    DROP TABLE IF EXISTS `%TICKET_PREFIX%sla`;
    CREATE TABLE IF NOT EXISTS `%TICKET_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`)
        VALUES (1, 1, 0, 48, 'Default SLA', NULL);
    
    -- 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`)
        VALUES (0, 1, 0, 'Level I Support', '');
    
    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`
        ADD notes TEXT NULL AFTER can_manage_kb,
        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 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 (all records are updated).
    UPDATE `%TABLE_PREFIX%email_template` SET updated=NOW() ,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.';
    
    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` tinytext( 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`) VALUES
    SELECT 1, 'email', 'equals', email FROM `%TABLE_PREFIX%email_banlist`;
    
    -- 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`
      ADD `notes` TEXT NOT NULL AFTER `answer`,
      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.
      DROP INDEX `title` ,
      ADD FULLTEXT `resp` (`title` ,`answer`);
      
    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;