From 58ef4f6ac20a7268d27e5f6bfec0cf075677cfe2 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Thu, 10 Oct 2013 14:15:44 +0000 Subject: [PATCH] Complete the upgrader --- include/class.orm.php | 4 +- include/staff/dynamic-forms.inc.php | 2 +- include/staff/dynamic-lists.inc.php | 2 +- include/upgrader/streams/core.sig | 2 +- .../core/d51f303a-DYNAMICF.cleanup.sql | 66 ----------- .../core/dad45ca2-17f0cc96.cleanup.sql | 104 ++++++++++++++++++ ....patch.sql => dad45ca2-17f0cc96.patch.sql} | 13 ++- ...CF.task.php => dad45ca2-17f0cc96.task.php} | 0 setup/inc/streams/core/install-mysql.sql | 7 +- 9 files changed, 120 insertions(+), 80 deletions(-) delete mode 100644 include/upgrader/streams/core/d51f303a-DYNAMICF.cleanup.sql create mode 100644 include/upgrader/streams/core/dad45ca2-17f0cc96.cleanup.sql rename include/upgrader/streams/core/{d51f303a-DYNAMICF.patch.sql => dad45ca2-17f0cc96.patch.sql} (93%) rename include/upgrader/streams/core/{d51f303a-DYNAMICF.task.php => dad45ca2-17f0cc96.task.php} (100%) diff --git a/include/class.orm.php b/include/class.orm.php index 50aae3b23..8aa8e5d39 100644 --- a/include/class.orm.php +++ b/include/class.orm.php @@ -705,7 +705,7 @@ class MySqlCompiler extends SqlCompiler { else { $b = $this->input($b); } - return sprintf('%s IN %s', $a, $b); + return sprintf('%s IN (%s)', $a, $b); } function compileJoin($tip, $model, $alias, $info) { @@ -733,7 +733,7 @@ class MySqlCompiler extends SqlCompiler { if ($what instanceof QuerySet) { $q = $what->getQuery(array('nosort'=>true)); $this->params += $q->params; - return '(' . (string)$q . ')'; + return (string)$q; } else { $this->params[] = $what; diff --git a/include/staff/dynamic-forms.inc.php b/include/staff/dynamic-forms.inc.php index 0990da7c2..2c4fa1d2c 100644 --- a/include/staff/dynamic-forms.inc.php +++ b/include/staff/dynamic-forms.inc.php @@ -7,7 +7,7 @@ <?php $page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1; -$count = DynamicForm::objects()->filter(array('type'=>'G'))->count(); +$count = DynamicForm::objects()->filter(array('type__in'=>array('T','U','G')))->count(); $pageNav = new Pagenate($count, $page, PAGE_LIMIT); $pageNav->setURL('forms.php'); $showing=$pageNav->showing().' forms'; diff --git a/include/staff/dynamic-lists.inc.php b/include/staff/dynamic-lists.inc.php index 2baf9f81a..846cab58b 100644 --- a/include/staff/dynamic-lists.inc.php +++ b/include/staff/dynamic-lists.inc.php @@ -10,7 +10,7 @@ $page = ($_GET['p'] && is_numeric($_GET['p'])) ? $_GET['p'] : 1; $count = DynamicList::objects()->count(); $pageNav = new Pagenate($count, $page, PAGE_LIMIT); $pageNav->setURL('lists.php'); -$showing=$pageNav->showing().' dynamic lists'; +$showing=$pageNav->showing().' custom lists'; ?> <form action="lists.php" method="POST" name="lists"> diff --git a/include/upgrader/streams/core.sig b/include/upgrader/streams/core.sig index 55533fd92..ce6d3fd65 100644 --- a/include/upgrader/streams/core.sig +++ b/include/upgrader/streams/core.sig @@ -1 +1 @@ -6871646b8ea2848fc0039a601e1e7ce4 +17f0cc96b366a747113622fa4780f9bc diff --git a/include/upgrader/streams/core/d51f303a-DYNAMICF.cleanup.sql b/include/upgrader/streams/core/d51f303a-DYNAMICF.cleanup.sql deleted file mode 100644 index 00eac5576..000000000 --- a/include/upgrader/streams/core/d51f303a-DYNAMICF.cleanup.sql +++ /dev/null @@ -1,66 +0,0 @@ --- Port data from the ticket table --- 1. Create form entries for each ticket -INSERT INTO `%TABLE_PREFIX%form_entry` ( - `section_id`, `ticket_id`, `sort`, `created`, `updated`) - SELECT 1, `ticket_id`, 10, `created`, `updated` - FROM `%TABLE_PREFIX%ticket`; - --- 2. Copy subject lines from the ticket table into section #2 -INSERT INTO `%TABLE_PREFIX%form_entry_values` ( - `field_id`, `entry_id`, `value`) - SELECT A3.`field_id`, A2.`id`, A1.`subject` - FROM `%TABLE_PREFIX%ticket` A1 - INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A1.`ticket_id` - = A2.`ticket_id` AND A2.`section_id` = 2), - INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`section_id` - = A3.`section_id`) - WHERE A3.`name` = 'subject'; - --- TODO: Move this to a client info dynamic entry --- 3. Copy Phone from the ticket table to section #1 -INSERT INTO `%TABLE_PREFIX%form_entry_values` ( - `field_id`, `entry_id`, `value`) - SELECT A3.`field_id`, A2.`id`, CONCAT(A1.`phone`, 'X', A1.`phone_ext`) - FROM `%TABLE_PREFIX%ticket` A1 - INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A1.`ticket_id` - = A2.`ticket_id` AND A2.`section_id` = 1), - INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`section_id` - = A3.`section_id`) - WHERE A3.`name` = 'phone' AND LENGTH(A1.`phone`); - --- 4. Create <user> accounts for everybody --- - Start with creating email addresses for the accounts -INSERT INTO `%TABLE_PREFIX%user_email` (`address`) - SELECT DISTINCT `email` FROM `%TABLE_PREFIX%ticket`; - --- - Then create the accounts and link the `default_email`s -INSERT INTO `%TABLE_PREFIX%user` (`first`, `default_email_id`) - SELECT MAX(`name`), A2.`id` - FROM `%TABLE_PREFIX%ticket` A1 - INNER JOIN `%TABLE_PREFIX%user_email` A2 ON (A1.`email` = A2.`address`); - GROUP BY A2.`id` - --- - Now link the user and user_email tables -ALTER TABLE `%TABLE_PREFIX%user` ADD KEY `def_eml_id` (`default_email_id`, `id`); -UPDATE `%TABLE_PREFIX%user_email` A1 - SET user_id = ( - SELECT A2.`id` FROM `%TABLE_PREFIX%user` A2 - WHERE `default_email_id` = A1.`id`); -ALTER TABLE `%TABLE_PREFIX%user` DROP INDEX `def_eml_id`; - --- - Update the ticket table -UPDATE `%TABLE_PREFIX%ticket` A1 - JOIN `%TABLE_PREFIX%user_email` A2 ON A2.`address` = A1.`email` - SET `user_id` = A2.`user_id`, - `user_email_id` = A2.`id`; - --- 4. Remove columns from ticket table -ALTER TABLE `%TABLE_PREFIX%ticket` - DROP COLUMN `name`, - DROP COLUMN `email`, - DROP COLUMN `phone`, - DROP COLUMN `phone_ext`, - DROP COLUMN `subject`; - --- 5. Cleanup ticket table with dropped varchar columns -OPTIMIZE TABLE `%TABLE_PREFIX%ticket`; diff --git a/include/upgrader/streams/core/dad45ca2-17f0cc96.cleanup.sql b/include/upgrader/streams/core/dad45ca2-17f0cc96.cleanup.sql new file mode 100644 index 000000000..4fe8c0d0a --- /dev/null +++ b/include/upgrader/streams/core/dad45ca2-17f0cc96.cleanup.sql @@ -0,0 +1,104 @@ +-- Port data from the ticket table +-- 1. Create form entries for each ticket +INSERT INTO `%TABLE_PREFIX%form_entry` ( + `form_id`, `object_id`, `object_type`, `sort`, `created`, `updated`) + SELECT (SELECT id FROM ost_form WHERE `type`='T'), + `ticket_id`, 'T', 10, `created`, `updated` + FROM `%TABLE_PREFIX%ticket`; + +-- 2. Copy subject lines from the ticket table into form entry +INSERT INTO `%TABLE_PREFIX%form_entry_values` ( + `field_id`, `entry_id`, `value`) + SELECT A3.`id`, A2.`id`, A1.`subject` + FROM `%TABLE_PREFIX%ticket` A1 + INNER JOIN `%TABLE_PREFIX%form` A4 ON (`type`='T') + INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A2.`object_id` + = A1.`ticket_id` AND A2.`object_type` = 'T') + INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`form_id` + = A4.`id`) + WHERE A3.`name` = 'subject'; + +-- 2b. Copy priority from ticket to custom form entry +INSERT INTO `%TABLE_PREFIX%form_entry_values` ( + `field_id`, `entry_id`, `value`, `value_id`) + SELECT A3.`id`, A2.`id`, A5.`priority_desc`, A1.`priority_id` + FROM `%TABLE_PREFIX%ticket` A1 + INNER JOIN `%TABLE_PREFIX%form` A4 ON (`type`='T') + INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A2.`object_id` + = A1.`ticket_id` AND A2.`object_type` = 'T') + INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`form_id` + = A4.`id`) + INNER JOIN `%TABLE_PREFIX%ticket_priority` A5 ON (A5.`priority_id` + = A1.`priority_id`) + WHERE A3.`name` = 'priority'; + +-- 3. Create <user> accounts for everybody +-- - Start with creating email addresses for the accounts +INSERT INTO `%TABLE_PREFIX%user_email` (`address`) + SELECT DISTINCT `email` FROM `%TABLE_PREFIX%ticket`; + +-- - Then create the accounts and link the `default_email`s +INSERT INTO `%TABLE_PREFIX%user` (`name`, `default_email_id`, `created`, `updated`) + SELECT MAX(`name`), A2.`id`, A1.`created`, A1.`updated` + FROM `%TABLE_PREFIX%ticket` A1 + INNER JOIN `%TABLE_PREFIX%user_email` A2 ON (A1.`email` = A2.`address`) + GROUP BY A2.`id`; + +-- - Now link the user and user_email tables +ALTER TABLE `%TABLE_PREFIX%user` ADD KEY `def_eml_id` (`default_email_id`, `id`); +UPDATE `%TABLE_PREFIX%user_email` A1 + SET user_id = ( + SELECT A2.`id` FROM `%TABLE_PREFIX%user` A2 + WHERE `default_email_id` = A1.`id`); +ALTER TABLE `%TABLE_PREFIX%user` DROP INDEX `def_eml_id`; + +-- - Update the ticket table +ALTER TABLE `%TABLE_PREFIX%ticket` ADD KEY `email_lookup` (`email`); +UPDATE `%TABLE_PREFIX%ticket` A1 + JOIN `%TABLE_PREFIX%user_email` A2 ON A2.`address` = A1.`email` + SET A1.`user_id` = A2.`user_id`, + A1.`user_email_id` = A2.`id`; +ALTER TABLE `%TABLE_PREFIX%ticket` DROP INDEX `email_lookup`; + +-- TODO: Move this to a client info dynamic entry +-- 4. Create form entries for each ticket +INSERT INTO `%TABLE_PREFIX%form_entry` ( + `form_id`, `object_id`, `object_type`, `sort`, `created`, `updated`) + SELECT DISTINCT A2.`id`, `user_id`, 'U', 10, MIN(A1.`created`), + MAX(A1.`updated`) + FROM `%TABLE_PREFIX%ticket` A1 + JOIN `%TABLE_PREFIX%form` A2 ON (A2.`type` = 'U') + GROUP BY `user_id`, A2.`id`; + +-- 5. Copy Phone from the ticket table to section #1 +INSERT INTO `%TABLE_PREFIX%form_entry_values` ( + `field_id`, `entry_id`, `value`) + SELECT A3.`id`, A2.`id`, MAX(CONCAT( + REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( + A1.`phone`, + ' ', ''), + ')', ''), + '(', ''), + '+', ''), + '-', ''), + '.', ''), 'X', A1.`phone_ext`)) + FROM `%TABLE_PREFIX%ticket` A1 + INNER JOIN `%TABLE_PREFIX%form` A4 ON (`type`='U') + INNER JOIN `%TABLE_PREFIX%form_entry` A2 ON (A2.`object_id` + = A1.`ticket_id` AND A2.`object_type` = 'U') + INNER JOIN `%TABLE_PREFIX%form_field` A3 ON (A2.`form_id` + = A4.`id`) + WHERE A3.`name` = 'phone' AND LENGTH(A1.`phone`) + GROUP BY A3.`id`, A2.`id`; + +-- 6. Remove columns from ticket table +ALTER TABLE `%TABLE_PREFIX%ticket` + DROP COLUMN `name`, + DROP COLUMN `email`, + DROP COLUMN `phone`, + DROP COLUMN `phone_ext`, + DROP COLUMN `subject`, + DROP COLUMN `priority_id`; + +-- 5. Cleanup ticket table with dropped varchar columns +OPTIMIZE TABLE `%TABLE_PREFIX%ticket`; diff --git a/include/upgrader/streams/core/d51f303a-DYNAMICF.patch.sql b/include/upgrader/streams/core/dad45ca2-17f0cc96.patch.sql similarity index 93% rename from include/upgrader/streams/core/d51f303a-DYNAMICF.patch.sql rename to include/upgrader/streams/core/dad45ca2-17f0cc96.patch.sql index 3a67733c6..d6c7bd630 100644 --- a/include/upgrader/streams/core/d51f303a-DYNAMICF.patch.sql +++ b/include/upgrader/streams/core/dad45ca2-17f0cc96.patch.sql @@ -1,6 +1,6 @@ /** * @version v1.8.0-dpr1 Dynamic Forms - * @signature 0000000000000000000000000000000 + * @signature 17f0cc96b366a747113622fa4780f9bc * * Adds the database structure for the dynamic forms feature and migrates * the database from the legacy <=1.7 format to the new format with the @@ -51,7 +51,7 @@ CREATE TABLE `%TABLE_PREFIX%form_entry` ( `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`), - KEY `ticket_dyn_form_lookup` (`ticket_id`) + KEY `entry_lookup` (`object_id`, `object_type`) ) DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `%TABLE_PREFIX%form_entry_values`; @@ -96,7 +96,7 @@ CREATE TABLE `%TABLE_PREFIX%user` ( `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`) -); +) DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `%TABLE_PREFIX%user_email`; CREATE TABLE `%TABLE_PREFIX%user_email` ( @@ -104,8 +104,9 @@ CREATE TABLE `%TABLE_PREFIX%user_email` ( `user_id` int(10) unsigned NOT NULL, `address` varchar(128) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `address` (`address`) -); + UNIQUE KEY `address` (`address`), + KEY `user_email_lookup` (`user_id`) +) DEFAULT CHARSET=utf8; ALTER TABLE `%TABLE_PREFIX%filter_rule` CHANGE `what` `what` varchar(32) NOT NULL; @@ -119,5 +120,5 @@ ALTER TABLE `%TABLE_PREFIX%ticket` -- Finished with patch UPDATE `%TABLE_PREFIX%config` - SET `value` = '00000000000000000000000000000000' + SET `value` = '17f0cc96b366a747113622fa4780f9bc' WHERE `key` = 'schema_signature' AND `namespace` = 'core'; diff --git a/include/upgrader/streams/core/d51f303a-DYNAMICF.task.php b/include/upgrader/streams/core/dad45ca2-17f0cc96.task.php similarity index 100% rename from include/upgrader/streams/core/d51f303a-DYNAMICF.task.php rename to include/upgrader/streams/core/dad45ca2-17f0cc96.task.php diff --git a/setup/inc/streams/core/install-mysql.sql b/setup/inc/streams/core/install-mysql.sql index aa71d8cfe..e5859e815 100644 --- a/setup/inc/streams/core/install-mysql.sql +++ b/setup/inc/streams/core/install-mysql.sql @@ -761,7 +761,7 @@ CREATE TABLE `%TABLE_PREFIX%user` ( `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`) -); +) DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `%TABLE_PREFIX%user_email`; CREATE TABLE `%TABLE_PREFIX%user_email` ( @@ -769,5 +769,6 @@ CREATE TABLE `%TABLE_PREFIX%user_email` ( `user_id` int(10) unsigned NOT NULL, `address` varchar(128) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `address` (`address`) -); + UNIQUE KEY `address` (`address`), + KEY `user_email_lookup` (`user_id`) +) DEFAULT CHARSET=utf8; -- GitLab