diff --git a/include/class.orm.php b/include/class.orm.php index 50aae3b237f454ec97d26928ed6bbdf7a1ae179b..8aa8e5d39fe0e57ee715d334411ddfb49790d47b 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 0990da7c2a6e5489e7c987ac1ce69f23de8b8b3c..2c4fa1d2c413191f5e648f16bc614292470814c7 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 2baf9f81a7bc54ea1869ad64f84985985c5708e9..846cab58b8bc4d17dbfcbd275a193d7175cd2da6 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 55533fd92d8d8cfb4425f7a3046c7170e374aad4..ce6d3fd6537de8fbe1b5c9acda7833e5972d37b6 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 00eac557648e4631d36f4f53bec1d96e6c8123bb..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..4fe8c0d0a9253566015880bba8b3c615ae143c23 --- /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 3a67733c695fd96663c58b2570dcd941c257f179..d6c7bd6304bb56cdaba8a4c38700ca5fcf9b7185 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 aa71d8cfed0dd1d50dd8973191f105f701242677..e5859e815129110747cd04653679859e6ce9c2f8 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;