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