summaryrefslogtreecommitdiff
path: root/rt/etc/upgrade
diff options
context:
space:
mode:
Diffstat (limited to 'rt/etc/upgrade')
-rw-r--r--rt/etc/upgrade/3.1.0/acl.Informix4
-rwxr-xr-xrt/etc/upgrade/3.1.0/acl.Oracle4
-rwxr-xr-xrt/etc/upgrade/3.1.0/acl.Pg19
-rwxr-xr-xrt/etc/upgrade/3.1.0/acl.SQLite4
-rwxr-xr-xrt/etc/upgrade/3.1.0/acl.mysql4
-rw-r--r--rt/etc/upgrade/3.1.0/content2
-rw-r--r--rt/etc/upgrade/3.1.0/schema.Informix17
-rw-r--r--rt/etc/upgrade/3.1.0/schema.Oracle17
-rwxr-xr-xrt/etc/upgrade/3.1.0/schema.Pg25
-rw-r--r--rt/etc/upgrade/3.1.0/schema.SQLite21
-rwxr-xr-xrt/etc/upgrade/3.1.0/schema.mysql21
-rw-r--r--rt/etc/upgrade/3.1.15/content7
-rw-r--r--rt/etc/upgrade/3.1.17/content22
-rw-r--r--rt/etc/upgrade/3.3.0/acl.Informix4
-rw-r--r--rt/etc/upgrade/3.3.0/acl.Oracle4
-rw-r--r--rt/etc/upgrade/3.3.0/acl.Pg20
-rw-r--r--rt/etc/upgrade/3.3.0/acl.SQLite4
-rw-r--r--rt/etc/upgrade/3.3.0/acl.mysql4
-rw-r--r--rt/etc/upgrade/3.3.0/content1
-rw-r--r--rt/etc/upgrade/3.3.0/schema.Oracle65
-rw-r--r--rt/etc/upgrade/3.3.0/schema.Pg74
-rw-r--r--rt/etc/upgrade/3.3.0/schema.mysql65
-rw-r--r--rt/etc/upgrade/3.3.11/acl.Oracle4
-rw-r--r--rt/etc/upgrade/3.3.11/acl.Pg4
-rw-r--r--rt/etc/upgrade/3.3.11/acl.SQLite4
-rw-r--r--rt/etc/upgrade/3.3.11/acl.mysql4
-rw-r--r--rt/etc/upgrade/3.3.11/content1
-rw-r--r--rt/etc/upgrade/3.3.11/schema.Oracle0
-rw-r--r--rt/etc/upgrade/3.3.11/schema.Pg11
-rw-r--r--rt/etc/upgrade/3.3.11/schema.SQLite0
-rw-r--r--rt/etc/upgrade/3.3.11/schema.mysql5
-rw-r--r--rt/etc/upgrade/3.5.1/content36
-rw-r--r--rt/etc/upgrade/3.7.1/content14
-rw-r--r--rt/etc/upgrade/3.7.10/content49
-rw-r--r--rt/etc/upgrade/3.7.15/content12
-rw-r--r--rt/etc/upgrade/3.7.19/content37
-rw-r--r--rt/etc/upgrade/3.7.3/schema.Oracle5
-rw-r--r--rt/etc/upgrade/3.7.3/schema.Pg1
-rw-r--r--rt/etc/upgrade/3.7.3/schema.mysql1
-rw-r--r--rt/etc/upgrade/3.7.81/schema.Oracle2
-rw-r--r--rt/etc/upgrade/3.7.81/schema.mysql2
-rw-r--r--rt/etc/upgrade/3.7.82/content13
-rw-r--r--rt/etc/upgrade/3.7.85/content11
-rw-r--r--rt/etc/upgrade/3.7.86/content23
-rw-r--r--rt/etc/upgrade/3.7.87/content28
-rwxr-xr-xrt/etc/upgrade/3.8-branded-queues-extension95
-rwxr-xr-xrt/etc/upgrade/3.8-branded-queues-extension.in95
-rwxr-xr-xrt/etc/upgrade/3.8-ical-extension96
-rw-r--r--rt/etc/upgrade/3.8-ical-extension.in96
-rw-r--r--rt/etc/upgrade/3.8.0/content22
-rw-r--r--rt/etc/upgrade/3.8.1/content24
-rw-r--r--rt/etc/upgrade/3.8.2/content186
-rw-r--r--rt/etc/upgrade/3.8.3/content91
-rw-r--r--rt/etc/upgrade/3.8.3/schema.Pg3
-rw-r--r--rt/etc/upgrade/3.8.4/content59
-rw-r--r--rt/etc/upgrade/3.8.6/content10
-rw-r--r--rt/etc/upgrade/3.8.8/content38
-rw-r--r--rt/etc/upgrade/shrink_cgm_table.pl72
-rwxr-xr-xrt/etc/upgrade/split-out-cf-categories171
-rw-r--r--rt/etc/upgrade/split-out-cf-categories.in171
-rwxr-xr-xrt/etc/upgrade/upgrade-mysql-schema.pl390
61 files changed, 0 insertions, 2294 deletions
diff --git a/rt/etc/upgrade/3.1.0/acl.Informix b/rt/etc/upgrade/3.1.0/acl.Informix
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.1.0/acl.Informix
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.1.0/acl.Oracle b/rt/etc/upgrade/3.1.0/acl.Oracle
deleted file mode 100755
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.1.0/acl.Oracle
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.1.0/acl.Pg b/rt/etc/upgrade/3.1.0/acl.Pg
deleted file mode 100755
index 9c88782..0000000
--- a/rt/etc/upgrade/3.1.0/acl.Pg
+++ /dev/null
@@ -1,19 +0,0 @@
-sub acl {
- my $dbh = shift;
-
- my @acls;
-
- my @tables = qw (
- attributes_id_seq
- attributes
- );
-
- foreach my $table (@tables) {
- push @acls,
- "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
- . RT->Config->Get('DatabaseUser') . ";";
-
- }
- return (@acls);
-}
-1;
diff --git a/rt/etc/upgrade/3.1.0/acl.SQLite b/rt/etc/upgrade/3.1.0/acl.SQLite
deleted file mode 100755
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.1.0/acl.SQLite
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.1.0/acl.mysql b/rt/etc/upgrade/3.1.0/acl.mysql
deleted file mode 100755
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.1.0/acl.mysql
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.1.0/content b/rt/etc/upgrade/3.1.0/content
deleted file mode 100644
index 3117daf..0000000
--- a/rt/etc/upgrade/3.1.0/content
+++ /dev/null
@@ -1,2 +0,0 @@
-# nothing to do
-1;
diff --git a/rt/etc/upgrade/3.1.0/schema.Informix b/rt/etc/upgrade/3.1.0/schema.Informix
deleted file mode 100644
index 722eb70..0000000
--- a/rt/etc/upgrade/3.1.0/schema.Informix
+++ /dev/null
@@ -1,17 +0,0 @@
-CREATE TABLE Attributes (
- id SERIAL,
- Name VARCHAR(255) DEFAULT '' NOT NULL,
- Description VARCHAR(255) DEFAULT NULL,
- Content BYTE,
- ContentType VARCHAR(16),
- ObjectType VARCHAR(25) NOT NULL,
- ObjectId INTEGER DEFAULT 0 NOT NULL,
- Creator INTEGER DEFAULT 0 NOT NULL,
- Created DATETIME YEAR TO SECOND,
- LastUpdatedBy INTEGER DEFAULT 0 NOT NULL,
- LastUpdated DATETIME YEAR TO SECOND,
- PRIMARY KEY (id)
-);
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
diff --git a/rt/etc/upgrade/3.1.0/schema.Oracle b/rt/etc/upgrade/3.1.0/schema.Oracle
deleted file mode 100644
index a8aae18..0000000
--- a/rt/etc/upgrade/3.1.0/schema.Oracle
+++ /dev/null
@@ -1,17 +0,0 @@
-CREATE SEQUENCE ATTRIBUTES_seq;
-CREATE TABLE Attributes (
- id NUMBER(11,0) PRIMARY KEY,
- Name VARCHAR2(255) NOT NULL,
- Description VARCHAR2(255),
- Content CLOB,
- ContentType VARCHAR(16),
- ObjectType VARCHAR2(25) NOT NULL,
- ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
diff --git a/rt/etc/upgrade/3.1.0/schema.Pg b/rt/etc/upgrade/3.1.0/schema.Pg
deleted file mode 100755
index 94c3fe7..0000000
--- a/rt/etc/upgrade/3.1.0/schema.Pg
+++ /dev/null
@@ -1,25 +0,0 @@
--- {{{ Attributes
-
-CREATE SEQUENCE attributes_id_seq;
-
-CREATE TABLE Attributes (
- id INTEGER DEFAULT nextval('attributes_id_seq'),
- Name varchar(255) NOT NULL ,
- Description varchar(255) NULL ,
- Content text,
- ContentType varchar(16),
- ObjectType varchar(64),
- ObjectId integer,
- Creator integer NOT NULL DEFAULT 0 ,
- Created TIMESTAMP NULL ,
- LastUpdatedBy integer NOT NULL DEFAULT 0 ,
- LastUpdated TIMESTAMP NULL ,
- PRIMARY KEY (id)
-
-);
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
-
--- }}}
-
diff --git a/rt/etc/upgrade/3.1.0/schema.SQLite b/rt/etc/upgrade/3.1.0/schema.SQLite
deleted file mode 100644
index 1dd466f..0000000
--- a/rt/etc/upgrade/3.1.0/schema.SQLite
+++ /dev/null
@@ -1,21 +0,0 @@
---- {{{ Attributes
-CREATE TABLE Attributes (
- id INTEGER PRIMARY KEY ,
- Name varchar(255) NOT NULL ,
- Description varchar(255) NULL ,
- Content LONGTEXT NULL ,
- ContentType varchar(16),
- ObjectType varchar(25) NOT NULL ,
- ObjectId INTEGER default 0,
- Creator integer NULL ,
- Created DATETIME NULL ,
- LastUpdatedBy integer NULL ,
- LastUpdated DATETIME NULL
-
-) ;
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
-
---- }}}
-
diff --git a/rt/etc/upgrade/3.1.0/schema.mysql b/rt/etc/upgrade/3.1.0/schema.mysql
deleted file mode 100755
index c4a345d..0000000
--- a/rt/etc/upgrade/3.1.0/schema.mysql
+++ /dev/null
@@ -1,21 +0,0 @@
-# {{{ Attributes
-
-CREATE TABLE Attributes (
- id INTEGER NOT NULL AUTO_INCREMENT,
- Name varchar(255) NULL ,
- Description varchar(255) NULL ,
- Content text,
- ContentType varchar(16),
- ObjectType varchar(64),
- ObjectId integer, # foreign key to anything
- Creator integer NOT NULL DEFAULT 0 ,
- Created DATETIME NULL ,
- LastUpdatedBy integer NOT NULL DEFAULT 0 ,
- LastUpdated DATETIME NULL ,
- PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-CREATE INDEX Attributes1 on Attributes(Name);
-CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId);
-
-# }}}
diff --git a/rt/etc/upgrade/3.1.15/content b/rt/etc/upgrade/3.1.15/content
deleted file mode 100644
index d23125a..0000000
--- a/rt/etc/upgrade/3.1.15/content
+++ /dev/null
@@ -1,7 +0,0 @@
-@Scrips = (
- { ScripCondition => 'On Owner Change',
- ScripAction => 'Notify Owner',
- Template => 'Transaction' },
-);
-
-1;
diff --git a/rt/etc/upgrade/3.1.17/content b/rt/etc/upgrade/3.1.17/content
deleted file mode 100644
index 1d648d8..0000000
--- a/rt/etc/upgrade/3.1.17/content
+++ /dev/null
@@ -1,22 +0,0 @@
-@ScripActions = (
- { Name => 'Notify Ccs as Comment', # loc
- Description => 'Sends mail to the Ccs as a comment', # loc
- ExecModule => 'NotifyAsComment',
- Argument => 'Cc' },
- { Name => 'Notify Ccs', # loc
- Description => 'Sends mail to the Ccs', # loc
- ExecModule => 'Notify',
- Argument => 'Cc' },
-);
-
-
-@ScripConditions = (
- {
- Name => 'On Priority Change', # loc
- Description => 'Whenever a ticket\'s priority changes', # loc
- ApplicableTransTypes => 'Set',
- ExecModule => 'PriorityChange',
- },
-);
-
-1;
diff --git a/rt/etc/upgrade/3.3.0/acl.Informix b/rt/etc/upgrade/3.3.0/acl.Informix
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.0/acl.Informix
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.0/acl.Oracle b/rt/etc/upgrade/3.3.0/acl.Oracle
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.0/acl.Oracle
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.0/acl.Pg b/rt/etc/upgrade/3.3.0/acl.Pg
deleted file mode 100644
index bd2e36c..0000000
--- a/rt/etc/upgrade/3.3.0/acl.Pg
+++ /dev/null
@@ -1,20 +0,0 @@
-sub acl {
- my $dbh = shift;
-
- my @acls;
-
- my @tables = qw (
- objectcustomfieldvalues
- objectcustomfields_id_s
- objectcustomfields
- );
-
- foreach my $table (@tables) {
- push @acls,
- "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to "
- . RT->Config->Get('DatabaseUser') . ";";
-
- }
- return (@acls);
-}
-1;
diff --git a/rt/etc/upgrade/3.3.0/acl.SQLite b/rt/etc/upgrade/3.3.0/acl.SQLite
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.0/acl.SQLite
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.0/acl.mysql b/rt/etc/upgrade/3.3.0/acl.mysql
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.0/acl.mysql
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.0/content b/rt/etc/upgrade/3.3.0/content
deleted file mode 100644
index 0afc604..0000000
--- a/rt/etc/upgrade/3.3.0/content
+++ /dev/null
@@ -1 +0,0 @@
-1;
diff --git a/rt/etc/upgrade/3.3.0/schema.Oracle b/rt/etc/upgrade/3.3.0/schema.Oracle
deleted file mode 100644
index f81feeb..0000000
--- a/rt/etc/upgrade/3.3.0/schema.Oracle
+++ /dev/null
@@ -1,65 +0,0 @@
-alter Table Transactions ADD ObjectType VARCHAR2(64);
-UPDATE Transactions set ObjectType = 'RT::Ticket';
-ALTER TABLE Transactions modify ObjectType NOT NULL;
-ALTER TABLE Transactions drop column EffectiveTicket;
-ALTER TABLE Transactions ADD ReferenceType VARCHAR2(255) NULL;
-ALTER TABLE Transactions ADD OldReference NUMBER(11,0) NULL;
-ALTER TABLE Transactions ADD NewReference NUMBER(11,0) NULL;
-DROP INDEX transactions1;
-ALTER TABLE Transactions rename column Ticket to ObjectId;
-CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
-
-ALTER TABLE TicketCustomFieldValues rename to ObjectCustomFieldValues;
-ALTER TABLE ObjectCustomFieldValues rename column Ticket to ObjectId;
-ALTER TABLE ObjectCustomFieldValues ADD ObjectType VARCHAR2(255);
-UPDATE ObjectCustomFieldValues set ObjectType = 'RT::Ticket';
-ALTER TABLE ObjectCustomFieldValues MODIFY ObjectType NOT NULL;
-ALTER TABLE ObjectCustomFieldValues ADD Disabled NUMBER(11,0);
-ALTER TABLE ObjectCustomFieldValues MODIFY Disabled default 0;
-UPDATE ObjectCustomFieldValues SET Disabled = 0;
-ALTER TABLE ObjectCustomFieldValues MODIFY Disabled NOT NULL;
-ALTER TABLE ObjectCustomFieldValues ADD LargeContent CLOB NULL;
-ALTER TABLE ObjectCustomFieldValues ADD ContentType VARCHAR2(80) NULL;
-ALTER TABLE ObjectCustomFieldValues ADD ContentEncoding VARCHAR2(80) NULL;
-ALTER TABLE ObjectCustomFieldValues ADD SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL;
-
-
-
-CREATE INDEX ObjectCustomFieldValues1 on ObjectCustomFieldValues (CustomField,ObjectType,ObjectId,Content);
-CREATE INDEX ObjectCustomFieldValues2 on ObjectCustomFieldValues (CustomField,ObjectType,ObjectId);
-
-
-
-CREATE SEQUENCE OBJECTCUSTOMFIELDS_seq;
-CREATE TABLE ObjectCustomFields (
- id NUMBER(11,0)
- CONSTRAINT ObjectCustomFields_Key PRIMARY KEY,
- CustomField NUMBER(11,0) NOT NULL,
- ObjectId NUMBER(11,0) NOT NULL,
- SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
- Creator NUMBER(11,0) DEFAULT 0 NOT NULL,
- Created DATE,
- LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL,
- LastUpdated DATE
-);
-
-
-INSERT into ObjectCustomFields (id, CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT objectcustomfields_seq.nextval, id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields;
-
-ALTER TABLE CustomFields ADD LookupType VARCHAR2(255);
-ALTER TABLE CustomFields ADD Repeated NUMBER(11,0);
-ALTER TABLE CustomFields ADD Pattern VARCHAR2(255) NULL;
-ALTER TABLE CustomFields ADD MaxValues NUMBER(11,0);
-
-UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple';
-UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single';
-UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%';
-UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%';
-UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket';
-ALTER TABLE CustomFields MODIFY LookupType NOT NULL;
-UPDATE CustomFields Set Repeated = 0;
-ALTER TABLE CustomFields MODIFY Repeated DEFAULT 0;
-ALTER TABLE CustomFields MODIFY Repeated NOT NULL;
-ALTER TABLE CustomFields drop column Queue;
-
-
diff --git a/rt/etc/upgrade/3.3.0/schema.Pg b/rt/etc/upgrade/3.3.0/schema.Pg
deleted file mode 100644
index 427eae7..0000000
--- a/rt/etc/upgrade/3.3.0/schema.Pg
+++ /dev/null
@@ -1,74 +0,0 @@
-alter Table Transactions ADD Column ObjectType varchar(64);
-update Transactions set ObjectType = 'RT::Ticket';
-ALTER TABLE Transactions ALTER COLUMN ObjectType SET NOT NULL;
-alter table Transactions drop column EffectiveTicket;
-alter table Transactions add column ReferenceType varchar(255) NULL;
-alter table Transactions add column OldReference integer NULL;
-alter table Transactions add column NewReference integer NULL;
-drop index transactions1;
-alter table Transactions rename column Ticket to ObjectId;
-
-
-CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
-
-alter table TicketCustomFieldValues rename to ObjectCustomFieldValues;
-
-alter table ObjectCustomFieldValues rename column Ticket to ObjectId;
-
-alter table objectcustomfieldvalues add column ObjectType varchar(255);
-
-update objectcustomfieldvalues set ObjectType = 'RT::Ticket';
-
-ALTER TABLE objectcustomfieldvalues ALTER COLUMN ObjectType SET NOT NULL;
-
-alter table objectcustomfieldvalues add column Current int;
-
-alter table objectcustomfieldvalues alter column Current SET default 1;
-
-UPDATE objectcustomfieldvalues SET Current = 1;
-
-alter table objectcustomfieldvalues add column LargeContent TEXT NULL;
-
-alter table objectcustomfieldvalues add column ContentType varchar(80) NULL;
-
-alter table objectcustomfieldvalues add column ContentEncoding varchar(80) NULL;
-
-create index ObjectCustomFieldValues1 on objectcustomfieldvalues (CustomField,ObjectType,ObjectId,Content);
-
-create index ObjectCustomFieldValues2 on objectcustomfieldvalues (CustomField,ObjectType,ObjectId);
-
-
-CREATE SEQUENCE objectcustomfields_id_s;
-
-CREATE TABLE ObjectCustomFields (
- id INTEGER DEFAULT nextval('objectcustomfields_id_s'),
- CustomField integer NOT NULL,
- ObjectId integer NOT NULL,
- SortOrder integer NOT NULL DEFAULT 0 ,
-
- Creator integer NOT NULL DEFAULT 0 ,
- Created TIMESTAMP NULL ,
- LastUpdatedBy integer NOT NULL DEFAULT 0 ,
- LastUpdated TIMESTAMP NULL ,
- PRIMARY KEY (id)
-
-);
-
-
-INSERT into ObjectCustomFields (CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields;
-
-alter table CustomFields add column LookupType varchar(255);
-alter table CustomFields add column Repeated int2;
-alter table CustomFields add column Pattern varchar(255) NULL;
-alter table CustomFields add column MaxValues integer;
-
-UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple';
-UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single';
-UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%';
-UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%';
-UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket';
-ALTER TABLE CustomFields ALTER COLUMN LookupType SET NOT NULL;
-UPDATE CustomFields Set Repeated = 0;
-ALTER TABLE CustomFields ALTER COLUMN Repeated SET DEFAULT 0;
-ALTER TABLE CustomFields ALTER COLUMN Repeated SET NOT NULL;
-alter table CustomFields drop column Queue;
diff --git a/rt/etc/upgrade/3.3.0/schema.mysql b/rt/etc/upgrade/3.3.0/schema.mysql
deleted file mode 100644
index 0e33a28..0000000
--- a/rt/etc/upgrade/3.3.0/schema.mysql
+++ /dev/null
@@ -1,65 +0,0 @@
-alter Table Transactions ADD Column (ObjectType varchar(64) not null);
-update Transactions set ObjectType = 'RT::Ticket';
-alter table Transactions drop column EffectiveTicket;
-alter table Transactions add column ReferenceType varchar(255) NULL;
-alter table Transactions add column OldReference integer NULL;
-alter table Transactions add column NewReference integer NULL;
-alter table Transactions drop index transactions1;
-alter table Transactions change Ticket ObjectId integer NOT NULL DEFAULT 0 ;
-
-CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId);
-
-alter table TicketCustomFieldValues rename ObjectCustomFieldValues;
-
-alter table ObjectCustomFieldValues change Ticket ObjectId integer NOT NULL DEFAULT 0 ;
-
-alter table ObjectCustomFieldValues add column ObjectType varchar(255) not null;
-
-update ObjectCustomFieldValues set ObjectType = 'RT::Ticket';
-
-alter table ObjectCustomFieldValues add column Current bool default 1;
-
-alter table ObjectCustomFieldValues add column LargeContent LONGTEXT NULL;
-
-alter table ObjectCustomFieldValues add column ContentType varchar(80) NULL;
-
-alter table ObjectCustomFieldValues add column ContentEncoding varchar(80) NULL;
-
-# These could fail if there's no such index and there's no "drop index if exists" syntax
-#alter table ObjectCustomFieldValues drop index ticketcustomfieldvalues1;
-#alter table ObjectCustomFieldValues drop index ticketcustomfieldvalues2;
-
-alter table ObjectCustomFieldValues add index ObjectCustomFieldValues1 (Content);
-
-alter table ObjectCustomFieldValues add index ObjectCustomFieldValues2 (CustomField,ObjectType,ObjectId);
-
-
-CREATE TABLE ObjectCustomFields (
- id INTEGER NOT NULL AUTO_INCREMENT,
- CustomField int NOT NULL ,
- ObjectId integer NOT NULL,
- SortOrder integer NOT NULL DEFAULT 0 ,
-
- Creator integer NOT NULL DEFAULT 0 ,
- Created DATETIME NULL ,
- LastUpdatedBy integer NOT NULL DEFAULT 0 ,
- LastUpdated DATETIME NULL ,
- PRIMARY KEY (id)
-) TYPE=InnoDB;
-
-
-INSERT into ObjectCustomFields (id, CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT null, id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields;
-
-alter table CustomFields add column LookupType varchar(255) NOT NULL;
-alter table CustomFields add column Repeated int2 NOT NULL DEFAULT 0 ;
-alter table CustomFields add column Pattern varchar(255) NULL;
-alter table CustomFields add column MaxValues integer;
-# See above
-# alter table CustomFields drop index CustomFields1;
-
-UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple';
-UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single';
-UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%';
-UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%';
-UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket';
-alter table CustomFields drop column Queue;
diff --git a/rt/etc/upgrade/3.3.11/acl.Oracle b/rt/etc/upgrade/3.3.11/acl.Oracle
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.11/acl.Oracle
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.11/acl.Pg b/rt/etc/upgrade/3.3.11/acl.Pg
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.11/acl.Pg
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.11/acl.SQLite b/rt/etc/upgrade/3.3.11/acl.SQLite
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.11/acl.SQLite
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.11/acl.mysql b/rt/etc/upgrade/3.3.11/acl.mysql
deleted file mode 100644
index 73c16ae..0000000
--- a/rt/etc/upgrade/3.3.11/acl.mysql
+++ /dev/null
@@ -1,4 +0,0 @@
-sub acl {
- return ();
-}
-1;
diff --git a/rt/etc/upgrade/3.3.11/content b/rt/etc/upgrade/3.3.11/content
deleted file mode 100644
index 0afc604..0000000
--- a/rt/etc/upgrade/3.3.11/content
+++ /dev/null
@@ -1 +0,0 @@
-1;
diff --git a/rt/etc/upgrade/3.3.11/schema.Oracle b/rt/etc/upgrade/3.3.11/schema.Oracle
deleted file mode 100644
index e69de29..0000000
--- a/rt/etc/upgrade/3.3.11/schema.Oracle
+++ /dev/null
diff --git a/rt/etc/upgrade/3.3.11/schema.Pg b/rt/etc/upgrade/3.3.11/schema.Pg
deleted file mode 100644
index 6ab5d65..0000000
--- a/rt/etc/upgrade/3.3.11/schema.Pg
+++ /dev/null
@@ -1,11 +0,0 @@
-ALTER TABLE ObjectCustomFieldValues ADD COLUMN SortOrder INTEGER;
-UPDATE ObjectCustomFieldValues SET SortOrder = 0;
-ALTER TABLE ObjectCustomFieldValues ALTER COLUMN SortOrder SET DEFAULT 0;
-ALTER TABLE ObjectCustomFieldValues ALTER COLUMN SortOrder SET NOT NULL;
-ALTER TABLE ObjectCustomFieldValues ADD COLUMN Disabled INTEGER;
-UPDATE ObjectCustomFieldValues SET Disabled = 1 WHERE Current = 0;
-UPDATE ObjectCustomFieldValues SET Disabled = 0 WHERE Current != 0;
-ALTER TABLE ObjectCustomFieldValues ALTER COLUMN Disabled SET DEFAULT 0;
-ALTER TABLE ObjectCustomFieldValues ALTER COLUMN Disabled SET NOT NULL;
-
-ALTER TABLE ObjectCustomFieldValues DROP COLUMN Current;
diff --git a/rt/etc/upgrade/3.3.11/schema.SQLite b/rt/etc/upgrade/3.3.11/schema.SQLite
deleted file mode 100644
index e69de29..0000000
--- a/rt/etc/upgrade/3.3.11/schema.SQLite
+++ /dev/null
diff --git a/rt/etc/upgrade/3.3.11/schema.mysql b/rt/etc/upgrade/3.3.11/schema.mysql
deleted file mode 100644
index cc35d40..0000000
--- a/rt/etc/upgrade/3.3.11/schema.mysql
+++ /dev/null
@@ -1,5 +0,0 @@
-ALTER TABLE ObjectCustomFieldValues ADD COLUMN SortOrder INTEGER NOT NULL DEFAULT 0;
-ALTER TABLE ObjectCustomFieldValues ADD COLUMN Disabled int2 NOT NULL DEFAULT 0;
-
-UPDATE ObjectCustomFieldValues SET Disabled = 1 WHERE Current = 0;
-ALTER TABLE ObjectCustomFieldValues DROP COLUMN Current;
diff --git a/rt/etc/upgrade/3.5.1/content b/rt/etc/upgrade/3.5.1/content
deleted file mode 100644
index 02d6a0c..0000000
--- a/rt/etc/upgrade/3.5.1/content
+++ /dev/null
@@ -1,36 +0,0 @@
-@Attributes = (
- { Name => 'Search - My Tickets',
- Description => '[_1] highest priority tickets I own',
- Content =>
- { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#', '<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus},
- Query => " Owner = '__CurrentUser__' AND ( Status = 'new' OR Status = 'open')",
- OrderBy => 'Priority',
- Order => 'DESC' },
- },
- { Name => 'Search - Unowned Tickets',
- Description => '[_1] newest unowned tickets',
- Content =>
- { Format => "'<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"__WebPath__/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', QueueName, ExtendedStatus, CreatedRelative, '<A HREF=\"__WebPath__/Ticket/Display.html?Action=Take&id=__id__\">__loc(Take)__</a>/TITLE:&nbsp;' ",
- Query => " Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')",
- OrderBy => 'Created',
- Order => 'DESC' },
- },
- { Name => 'HomepageSettings',
- Description => 'HomepageSettings',
- Content =>
- { 'body' =>
- [ { type => 'system', name => 'My Tickets' },
- { type => 'system', name => 'Unowned Tickets' },
- { type => 'component', name => 'QuickCreate'},
- ],
- 'summary' =>
- [
- { type => 'component', name => 'MyReminders' },
- { type => 'component', name => 'Quicksearch' },
- { type => 'component', name => 'RefreshHomepage' },
- ]
- },
-}
-);
-
-1;
diff --git a/rt/etc/upgrade/3.7.1/content b/rt/etc/upgrade/3.7.1/content
deleted file mode 100644
index fdd5061..0000000
--- a/rt/etc/upgrade/3.7.1/content
+++ /dev/null
@@ -1,14 +0,0 @@
-@ScripConditions = (
- { Name => 'On Close', # loc
- Description => 'Whenever a ticket is closed', # loc
- ApplicableTransTypes => 'Status,Set',
- ExecModule => 'CloseTicket',
- },
- { Name => 'On Reopen', # loc
- Description => 'Whenever a ticket is reopened', # loc
- ApplicableTransTypes => 'Status,Set',
- ExecModule => 'ReopenTicket',
- },
-);
-
-
diff --git a/rt/etc/upgrade/3.7.10/content b/rt/etc/upgrade/3.7.10/content
deleted file mode 100644
index d19f9e6..0000000
--- a/rt/etc/upgrade/3.7.10/content
+++ /dev/null
@@ -1,49 +0,0 @@
-
-@Templates = (
- { Queue => 0,
- Name => "Error: public key", # loc
- Description =>
- "Inform user that he has problems with public key and couldn't recieve encrypted content", # loc
- Content => q{Subject: We have no your public key or it's wrong
-
-You received this message as we have no your public PGP key or we have a problem with your key. Inform the administrator about the problem.
-}
- },
- { Queue => 0,
- Name => "Error to RT owner: public key", # loc
- Description =>
- "Inform RT owner that user(s) have problems with public keys", # loc
- Content => q{Subject: Some users have problems with public keys
-
-You received this message as RT has problems with public keys of the following user:
-{
- foreach my $e ( @BadRecipients ) {
- $OUT .= "* ". $e->{'Message'} ."\n";
- }
-}}
- },
- { Queue => 0,
- Name => "Error: no private key", # loc
- Description =>
- "Inform user that we received an encrypted email and we have no private keys to decrypt", # loc
- Content => q{Subject: we received message we cannot decrypt
-
-You sent an encrypted message with subject '{ $Message->head->get('Subject') }',
-but we have no private key it's encrypted to.
-
-Please, check that you encrypt messages with correct keys
-or contact the system administrator.}
- },
- { Queue => 0,
- Name => "Error: bad GnuPG data", # loc
- Description =>
- "Inform user that a message he sent has invalid GnuPG data", # loc
- Content => q{Subject: We received a message we cannot handle
-
-You sent us a message that we cannot handle due to corrupted GnuPG signature or encrypted block. we get the following error(s):
-{ foreach my $msg ( @Messages ) {
- $OUT .= "* $msg\n";
- }
-}}
- },
-);
diff --git a/rt/etc/upgrade/3.7.15/content b/rt/etc/upgrade/3.7.15/content
deleted file mode 100644
index 9d97c35..0000000
--- a/rt/etc/upgrade/3.7.15/content
+++ /dev/null
@@ -1,12 +0,0 @@
-
-@Templates = (
- { Queue => 0,
- Name => "Forward", # loc
- Description => "Heading of a forwarded message", # loc
- Content => q{
-
-This is forward of transaction #{ $Transaction->id } of a ticket #{ $Ticket->id }
-}
- },
-);
-
diff --git a/rt/etc/upgrade/3.7.19/content b/rt/etc/upgrade/3.7.19/content
deleted file mode 100644
index ac34ebe..0000000
--- a/rt/etc/upgrade/3.7.19/content
+++ /dev/null
@@ -1,37 +0,0 @@
-
-{ use strict;
-add_description_to_all_scrips();
-
-sub add_description_to_all_scrips {
- require RT::Scrips;
- my $scrips = RT::Scrips->new( $RT::SystemUser );
- $scrips->Limit( FIELD => 'Description', OPERATOR => 'IS', VALUE => 'NULL' );
- $scrips->Limit( FIELD => 'Description', VALUE => '' );
- while ( my $scrip = $scrips->Next ) {
- my $desc = $scrip->Description;
- next if defined $desc && length $desc;
-
- $desc = gen_scrip_description( $scrip );
-
- my ($status, $msg) = $scrip->SetDescription( $desc );
- unless ( $status ) {
- print STDERR "Couldn't set description of a scrip: $msg";
- } else {
- print "Added description to scrip #". $scrip->id ."\n";
- }
- }
-}
-
-sub gen_scrip_description {
- my $scrip = shift;
- my $condition = $scrip->ConditionObj->Name
- || $scrip->ConditionObj->Description
- || ('On Condition #'. $scrip->Condition);
- my $action = $scrip->ActionObj->Name
- || $scrip->ActionObj->Description
- || ('Run Action #'. $scrip->Action);
- return join ' ', $condition, $action;
-}
-}
-
-1;
diff --git a/rt/etc/upgrade/3.7.3/schema.Oracle b/rt/etc/upgrade/3.7.3/schema.Oracle
deleted file mode 100644
index 6136efa..0000000
--- a/rt/etc/upgrade/3.7.3/schema.Oracle
+++ /dev/null
@@ -1,5 +0,0 @@
-alter table CustomFields add Pattern_TMP clob;
-update CustomFields set Pattern_TMP = Pattern;
-commit;
-alter table CustomFields drop column Pattern;
-alter table CustomFields rename column Pattern_TMP to Pattern;
diff --git a/rt/etc/upgrade/3.7.3/schema.Pg b/rt/etc/upgrade/3.7.3/schema.Pg
deleted file mode 100644
index 5d0312e..0000000
--- a/rt/etc/upgrade/3.7.3/schema.Pg
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE customfields ALTER COLUMN pattern TYPE VARCHAR(65536);
diff --git a/rt/etc/upgrade/3.7.3/schema.mysql b/rt/etc/upgrade/3.7.3/schema.mysql
deleted file mode 100644
index 51c376d..0000000
--- a/rt/etc/upgrade/3.7.3/schema.mysql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE CustomFields CHANGE Pattern Pattern TEXT NULL;
diff --git a/rt/etc/upgrade/3.7.81/schema.Oracle b/rt/etc/upgrade/3.7.81/schema.Oracle
deleted file mode 100644
index 02da4ec..0000000
--- a/rt/etc/upgrade/3.7.81/schema.Oracle
+++ /dev/null
@@ -1,2 +0,0 @@
-CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
-
diff --git a/rt/etc/upgrade/3.7.81/schema.mysql b/rt/etc/upgrade/3.7.81/schema.mysql
deleted file mode 100644
index 02da4ec..0000000
--- a/rt/etc/upgrade/3.7.81/schema.mysql
+++ /dev/null
@@ -1,2 +0,0 @@
-CREATE INDEX CachedGroupMembers3 on CachedGroupMembers (MemberId, ImmediateParentId);
-
diff --git a/rt/etc/upgrade/3.7.82/content b/rt/etc/upgrade/3.7.82/content
deleted file mode 100644
index a1c555f..0000000
--- a/rt/etc/upgrade/3.7.82/content
+++ /dev/null
@@ -1,13 +0,0 @@
-@Attributes = (
- { Name => 'Search - Bookmarked Tickets',
- Description => 'Bookmarked Tickets', #loc
- Content =>
- { Format => q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>/TITLE:#',}
- . q{'<a href="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a>/TITLE:Subject',}
- . q{Priority, QueueName, ExtendedStatus, Bookmark},
- Query => "__Bookmarks__",
- OrderBy => 'LastUpdated',
- Order => 'DESC' },
- },
-);
-
diff --git a/rt/etc/upgrade/3.7.85/content b/rt/etc/upgrade/3.7.85/content
deleted file mode 100644
index 49ab286..0000000
--- a/rt/etc/upgrade/3.7.85/content
+++ /dev/null
@@ -1,11 +0,0 @@
-@Templates = (
-
- { Queue => '0',
- Name => 'Email Digest', # loc
- Description => 'Email template for periodic notification digests', # loc
- Content => q[Subject: RT Email Digest
-
-{ $Argument }
-],
- },
-);
diff --git a/rt/etc/upgrade/3.7.86/content b/rt/etc/upgrade/3.7.86/content
deleted file mode 100644
index da087ed..0000000
--- a/rt/etc/upgrade/3.7.86/content
+++ /dev/null
@@ -1,23 +0,0 @@
-@Final = (
- sub {
- $RT::Logger->debug("Adding search for bookmarked tickets to defaults");
- my $sys = RT::System->new($RT::SystemUser);
-
- my $attrs = RT::Attributes->new( $RT::SystemUser );
- $attrs->LimitToObject( $sys );
- my ($attr) = $attrs->Named( 'HomepageSettings' );
- unless ($attr) {
- $RT::Logger->error("You have no global home page settings");
- return;
- }
- my $content = $attr->Content;
- unshift @{ $content->{'body'} ||= [] },
- { type => 'system', name => 'Bookmarked Tickets' };
-
- my ($status, $msg) = $attr->SetContent( $content );
- $RT::Logger->error($msg) unless $status;
-
- $RT::Logger->debug("done.");
- return 1;
- },
-);
diff --git a/rt/etc/upgrade/3.7.87/content b/rt/etc/upgrade/3.7.87/content
deleted file mode 100644
index 0c677c4..0000000
--- a/rt/etc/upgrade/3.7.87/content
+++ /dev/null
@@ -1,28 +0,0 @@
-@Templates = (
-{
- Queue => 0,
- Name => "Error: Missing dashboard", # loc
- Description =>
- "Inform user that a dashboard he subscribed to is missing", # loc
- Content => q{Subject: [{RT->Config->Get('rtname')}] Missing dashboard!
-
-Greetings,
-
-You are subscribed to a dashboard that is currently missing. Most likely, the dashboard was deleted.
-
-RT will remove this subscription as it is no longer useful. Here's the information RT had about your subscription:
-
-DashboardID: { $SubscriptionObj->SubValue('DashboardId') }
-Frequency: { $SubscriptionObj->SubValue('Frequency') }
-Hour: { $SubscriptionObj->SubValue('Hour') }
-{
- $SubscriptionObj->SubValue('Frequency') eq 'weekly'
- ? "Day of week: " . $SubscriptionObj->SubValue('Dow')
- : $SubscriptionObj->SubValue('Frequency') eq 'monthly'
- ? "Day of month: " . $SubscriptionObj->SubValue('Dom')
- : ''
-}
-}
-},
-);
-
diff --git a/rt/etc/upgrade/3.8-branded-queues-extension b/rt/etc/upgrade/3.8-branded-queues-extension
deleted file mode 100755
index 6a0ea48..0000000
--- a/rt/etc/upgrade/3.8-branded-queues-extension
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "local/lib";
-use lib "lib";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Queues;
-
-my $queues = RT::Queues->new( $RT::SystemUser );
-$queues->UnLimit();
-while ( my $queue = $queues->Next ) {
- print "Processing queue ". ($queue->Name || $queue->id) ."...\n";
- my $old_attr = $queue->FirstAttribute('BrandedSubjectTag');
- unless ( $old_attr ) {
- print "\thas no old-style subject tag. skipping\n";
- next;
- }
- my $old_value = $old_attr->Content;
- unless ( $old_value ) {
- print "\thas empty old-style subject tag\n";
- } else {
- my ($status, $msg) = $queue->SetSubjectTag( $old_value );
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't set tag: $msg\n";
- next;
- } else {
- print "\thave set new-style subject tag to '$old_value'\n";
- }
- }
-
- my ($status, $msg) = $queue->DeleteAttribute('BrandedSubjectTag');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't delete old-style tag: $msg\n";
- next;
- } else {
- print "\tdeleted old-style tag entry\n";
- }
- print "\tDONE\n";
-}
-
-exit 0;
-
diff --git a/rt/etc/upgrade/3.8-branded-queues-extension.in b/rt/etc/upgrade/3.8-branded-queues-extension.in
deleted file mode 100755
index 2f07d6e..0000000
--- a/rt/etc/upgrade/3.8-branded-queues-extension.in
+++ /dev/null
@@ -1,95 +0,0 @@
-#!@PERL@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "@LOCAL_LIB_PATH@";
-use lib "@RT_LIB_PATH@";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Queues;
-
-my $queues = RT::Queues->new( $RT::SystemUser );
-$queues->UnLimit();
-while ( my $queue = $queues->Next ) {
- print "Processing queue ". ($queue->Name || $queue->id) ."...\n";
- my $old_attr = $queue->FirstAttribute('BrandedSubjectTag');
- unless ( $old_attr ) {
- print "\thas no old-style subject tag. skipping\n";
- next;
- }
- my $old_value = $old_attr->Content;
- unless ( $old_value ) {
- print "\thas empty old-style subject tag\n";
- } else {
- my ($status, $msg) = $queue->SetSubjectTag( $old_value );
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't set tag: $msg\n";
- next;
- } else {
- print "\thave set new-style subject tag to '$old_value'\n";
- }
- }
-
- my ($status, $msg) = $queue->DeleteAttribute('BrandedSubjectTag');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't delete old-style tag: $msg\n";
- next;
- } else {
- print "\tdeleted old-style tag entry\n";
- }
- print "\tDONE\n";
-}
-
-exit 0;
-
diff --git a/rt/etc/upgrade/3.8-ical-extension b/rt/etc/upgrade/3.8-ical-extension
deleted file mode 100755
index 9561b97..0000000
--- a/rt/etc/upgrade/3.8-ical-extension
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "local/lib";
-use lib "lib";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Attributes;
-my $attrs = RT::Attributes->new( $RT::SystemUser );
-$attrs->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => 'RT::User');
-$attrs->Limit(FIELD => 'Name', OPERATOR=> '=', VALUE => 'ical-auth-token');
-while ( my $attr = $attrs->Next ) {
- my $uid = $attr->ObjectId;
- print "Processing auth token of user #". $uid ."...\n";
-
- my $user = RT::User->new( $RT::SystemUser );
- $user->Load( $uid );
- unless ( $user->id ) {
- print STDERR "\tERROR. Couldn't load user record\n";
- next;
- }
-
- my ($status, $msg);
-
- ($status, $msg) = $user->DeleteAttribute('AuthToken')
- if $user->FirstAttribute('AuthToken');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't delete duplicated attribute: $msg\n";
- next;
- } else {
- print "\tdeleted duplicate attribute\n";
- }
-
- ($status, $msg) = $attr->SetName('AuthToken');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't rename attribute: $msg\n";
- next;
- } else {
- print "\trenamed attribute\n";
- }
- print "\tDONE\n";
-}
-
-exit 0;
diff --git a/rt/etc/upgrade/3.8-ical-extension.in b/rt/etc/upgrade/3.8-ical-extension.in
deleted file mode 100644
index 510419c..0000000
--- a/rt/etc/upgrade/3.8-ical-extension.in
+++ /dev/null
@@ -1,96 +0,0 @@
-#!@PERL@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "@LOCAL_LIB_PATH@";
-use lib "@RT_LIB_PATH@";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Attributes;
-my $attrs = RT::Attributes->new( $RT::SystemUser );
-$attrs->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => 'RT::User');
-$attrs->Limit(FIELD => 'Name', OPERATOR=> '=', VALUE => 'ical-auth-token');
-while ( my $attr = $attrs->Next ) {
- my $uid = $attr->ObjectId;
- print "Processing auth token of user #". $uid ."...\n";
-
- my $user = RT::User->new( $RT::SystemUser );
- $user->Load( $uid );
- unless ( $user->id ) {
- print STDERR "\tERROR. Couldn't load user record\n";
- next;
- }
-
- my ($status, $msg);
-
- ($status, $msg) = $user->DeleteAttribute('AuthToken')
- if $user->FirstAttribute('AuthToken');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't delete duplicated attribute: $msg\n";
- next;
- } else {
- print "\tdeleted duplicate attribute\n";
- }
-
- ($status, $msg) = $attr->SetName('AuthToken');
- unless ( $status ) {
- print STDERR "\tERROR. Couldn't rename attribute: $msg\n";
- next;
- } else {
- print "\trenamed attribute\n";
- }
- print "\tDONE\n";
-}
-
-exit 0;
diff --git a/rt/etc/upgrade/3.8.0/content b/rt/etc/upgrade/3.8.0/content
deleted file mode 100644
index f4e389b..0000000
--- a/rt/etc/upgrade/3.8.0/content
+++ /dev/null
@@ -1,22 +0,0 @@
-@Final = (
- # by incident we've changed 'My Bookmarks' to 'Bookmarked Tickets' when
- # 3.7.82 upgrade script still was creating 'My Bookmarks', try to fix it
- sub {
- $RT::Logger->debug("Going to rename 'My Bookmarks' to 'Bookmarked Tickets'");
- my $sys = RT::System->new($RT::SystemUser);
-
- my $attrs = RT::Attributes->new( $RT::SystemUser );
- $attrs->LimitToObject( $sys );
- my ($attr) = $attrs->Named( 'Search - My Bookmarks' );
- unless ($attr) {
- $RT::Logger->debug("You have no global search 'My Bookmarks'. Skipped.");
- return 1;
- }
- my ($status, $msg) = $attr->SetName( 'Search - Bookmarked Tickets' );
- $RT::Logger->error($msg) and return undef unless $status;
-
- $RT::Logger->debug("Renamed.");
- return 1;
- },
-);
-
diff --git a/rt/etc/upgrade/3.8.1/content b/rt/etc/upgrade/3.8.1/content
deleted file mode 100644
index 89db596..0000000
--- a/rt/etc/upgrade/3.8.1/content
+++ /dev/null
@@ -1,24 +0,0 @@
-@Final = (
- sub {
- $RT::Logger->debug("Going to adjust 'Bookmarked Tickets'");
- my $sys = RT::System->new($RT::SystemUser);
-
- my $attrs = RT::Attributes->new( $RT::SystemUser );
- $attrs->LimitToObject( $sys );
- my ($attr) = $attrs->Named( 'Search - Bookmarked Tickets' );
- unless ($attr) {
- $RT::Logger->debug("You have no global search 'Bookmarked Tickets'. Skipped.");
- return 1;
- }
- my $props = $attr->Content;
- $props->{'Query'} =~ s/__Bookmarks__/id = '__Bookmarked__'/g;
-
- my ($status, $msg) = $attr->SetContent( $props );
- $RT::Logger->error($msg) and return undef unless $status;
-
- $RT::Logger->debug("Fixed.");
- return 1;
- },
-);
-
-
diff --git a/rt/etc/upgrade/3.8.2/content b/rt/etc/upgrade/3.8.2/content
deleted file mode 100644
index 9bd92be..0000000
--- a/rt/etc/upgrade/3.8.2/content
+++ /dev/null
@@ -1,186 +0,0 @@
-@Initial = (
- sub {
- $RT::Logger->warning(
- "Going to add [OLD] prefix to all temlates in approvals queue."
- ." If you never used approvals then you can delete all these"
- ." templates with [OLD] prefix. Leave new there may be you will"
- ." want to use approvals some time."
- );
-
- my $approvals_q = RT::Queue->new( $RT::SystemUser );
- $approvals_q->Load('___Approvals');
- unless ( $approvals_q->id ) {
- $RT::Logger->error("You have no approvals queue.");
- return 1;
- }
-
- my $templates = RT::Templates->new( $RT::SystemUser );
- $templates->LimitToQueue( $approvals_q->id );
- while ( my $tmpl = $templates->Next ) {
- my ($status, $msg) = $tmpl->SetName( "[OLD] ". $tmpl->Name );
- unless ( $status ) {
- $RT::Logger->error("Couldn't rename template #". $tmpl->id .": $msg");
- }
- }
- return 1;
- },
-);
-@ACL = (
- { GroupDomain => 'SystemInternal',
- GroupType => 'privileged',
- Right => 'ShowApprovalsTab', },
-);
-
-@Templates = (
- { Queue => '___Approvals',
- Name => "New Pending Approval", # loc
- Description =>
- "Notify Owners and AdminCcs of new items pending their approval", # loc
- Content => 'Subject: New Pending Approval: {$Ticket->Subject}
-
-Greetings,
-
-There is a new item pending your approval: "{$Ticket->Subject()}",
-a summary of which appears below.
-
-Please visit {RT->Config->Get(\'WebURL\')}Approvals/Display.html?id={$Ticket->id}
-to approve or reject this ticket, or {RT->Config->Get(\'WebURL\')}Approvals/ to
-batch-process all your pending approvals.
-
--------------------------------------------------------------------------
-{$Transaction->Content()}
-'
- },
- { Queue => '___Approvals',
- Name => "Approval Passed", # loc
- Description =>
- "Notify Requestor of their ticket has been approved by some approver", # loc
- Content => 'Subject: Ticket Approved: {$Ticket->Subject}
-
-Greetings,
-
-Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
-Other approvals may be pending.
-
-Approver\'s notes: { $Notes }
-'
- },
- { Queue => '___Approvals',
- Name => "All Approvals Passed", # loc
- Description =>
- "Notify Requestor of their ticket has been approved by all approvers", # loc
- Content => 'Subject: Ticket Approved: {$Ticket->Subject}
-
-Greetings,
-
-Your ticket has been approved by { eval { $Approval->OwnerObj->Name } }.
-Its Owner may now start to act on it.
-
-Approver\'s notes: { $Notes }
-'
- },
- { Queue => '___Approvals',
- Name => "Approval Rejected", # loc
- Description =>
- "Notify Owner of their rejected ticket", # loc
- Content => 'Subject: Ticket Rejected: {$Ticket->Subject}
-
-Greetings,
-
-Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }.
-
-Approver\'s notes: { $Notes }
-'
- },
- { Queue => '___Approvals',
- Name => "Approval Ready for Owner", # loc
- Description =>
- "Notify Owner of their ticket has been approved and is ready to be acted on", # loc
- Content => 'Subject: Ticket Approved: {$Ticket->Subject}
-
-Greetings,
-
-The ticket has been approved, you may now start to act on it.
-
-'
- },
-);
-
-@Final = (
- sub {
- $RT::Logger->debug("Going to adjust dashboards");
- my $sys = RT::System->new($RT::SystemUser);
-
- my $attrs = RT::Attributes->new( $RT::SystemUser );
- $attrs->UnLimit;
- my @dashboards = $attrs->Named('Dashboard');
-
- if (@dashboards == 0) {
- $RT::Logger->debug("You have no dashboards. Skipped.");
- return 1;
- }
-
- for my $attr (@dashboards) {
- my $props = $attr->Content;
- if (exists $props->{Searches}) {
- $props->{Panes} = {
- body => [
- map {
- my ($privacy, $id, $desc) = @$_;
-
- {
- portlet_type => 'search',
- privacy => $privacy,
- id => $id,
- description => $desc,
- pane => 'body',
- }
- } @{ delete $props->{Searches} }
- ],
- };
- }
- my ($status, $msg) = $attr->SetContent( $props );
- $RT::Logger->error($msg) unless $status;
- }
-
- $RT::Logger->debug("Fixed.");
- return 1;
- },
- sub {
- my $approvals_q = RT::Queue->new( $RT::SystemUser );
- $approvals_q->Load('___Approvals');
- unless ( $approvals_q->id ) {
- $RT::Logger->error("You have no approvals queue.");
- return 1;
- }
-
- require File::Temp;
- my ($tmp_fh, $tmp_fn) = File::Temp::tempfile( 'rt-approvals-scrips-XXXX', CLEANUP => 0 );
- unless ( $tmp_fh ) {
- $RT::Logger->error("Couldn't create temporary file.");
- return 0;
- }
-
- $RT::Logger->warning(
- "IMPORTANT: We're going to delete all scrips in Approvals queue"
- ." and save them in '$tmp_fn' file."
- );
-
- require Data::Dumper;
-
- my $scrips = RT::Scrips->new( $RT::SystemUser );
- $scrips->LimitToQueue( $approvals_q->id );
- while ( my $scrip = $scrips->Next ) {
- my %tmp =
- map { $tmp->{ $_ } = $scrip->_Value( $_ ) }
- $scrip->ReadableAttributes;
-
- print $tmp_fh Data::Dumper::Dumper( \%tmp );
-
- my ($status, $msg) = $scrip->Delete;
- unless ( $status ) {
- $RT::Logger->error( "Couldn't delete scrip: $msg");
- }
- }
- },
-);
diff --git a/rt/etc/upgrade/3.8.3/content b/rt/etc/upgrade/3.8.3/content
deleted file mode 100644
index 8538e42..0000000
--- a/rt/etc/upgrade/3.8.3/content
+++ /dev/null
@@ -1,91 +0,0 @@
-@ScripConditions = (
- { Name => 'On Reject', # loc
- Description => 'Whenever a ticket is rejected', # loc
- ApplicableTransTypes => 'Status',
- ExecModule => 'StatusChange',
- Argument => 'rejected'
-
- },
-);
-
-@Final = (
- sub {
- $RT::Logger->debug("Going to correct descriptions of notify actions in the DB");
-
- my $actions = RT::ScripActions->new( $RT::SystemUser );
- $actions->Limit(
- FIELD => 'ExecModule',
- VALUE => 'Notify',
- );
- $actions->Limit(
- FIELD => 'Argument',
- VALUE => 'All',
- );
- while ( my $action = $actions->Next ) {
- my ($status, $msg) = $action->__Set( Field => 'Name', Value => 'Notify Owner, Requestors, Ccs and AdminCcs' );
- $RT::Logger->warning( "Couldn't change action name: $msg" )
- unless $status;
-
- ($status, $msg) = $action->__Set( Field => 'Description', Value => 'Send mail to owner and all watchers' );
- $RT::Logger->warning( "Couldn't change action description: $msg" )
- unless $status;
- }
-
- $actions = RT::ScripActions->new( $RT::SystemUser );
- $actions->Limit(
- FIELD => 'ExecModule',
- VALUE => 'NotifyAsComment',
- );
- $actions->Limit(
- FIELD => 'Argument',
- VALUE => 'All',
- );
- while ( my $action = $actions->Next ) {
- my ($status, $msg) = $action->__Set( Field => 'Name', Value => 'Notify Owner, Requestors, Ccs and AdminCcs as Comment' );
- $RT::Logger->warning( "Couldn't change action name: $msg" )
- unless $status;
-
- ($status, $msg) = $action->__Set( Field => 'Description', Value => 'Send mail to owner and all watchers as a "comment"' );
- $RT::Logger->warning( "Couldn't change action description: $msg" )
- unless $status;
- }
-
- $RT::Logger->debug("Corrected descriptions of notify actions in the DB.");
- return 1;
- },
-);
-
-
-{
-$RT::Logger->debug("Going to add in Extract Subject Tag actions if they were missed during a previous upgrade");
-
-$actions = RT::ScripActions->new( $RT::SystemUser );
-$actions->Limit(
- FIELD => 'ExecModule',
- VALUE => 'ExtractSubjectTag',
-);
-my $extract_action = $actions->First;
-
-if ( $extract_action && $extract_action->Id ) {
- $RT::Logger->debug("You appear to already have an Extract Subject Tag action, skipping");
- return 1;
-} else {
- $RT::Logger->debug("Didn't find an existing Extract Subject Tag action, adding it");
- push @ScripActions, (
- { Name => 'Extract Subject Tag', # loc
- Description => 'Extract tags from a Transaction\'s subject and add them to the Ticket\'s subject.', # loc
- ExecModule => 'ExtractSubjectTag'
- },
- );
-
- $RT::Logger->debug("Adding Extract Subject Tag Scrip");
- push @Scrips, (
- { Description => "On transaction, add any tags in the transaction's subject to the ticket's subject",
- ScripCondition => 'On Transaction',
- ScripAction => 'Extract Subject Tag',
- Template => 'Blank'
- },
- );
-}
-}
-
diff --git a/rt/etc/upgrade/3.8.3/schema.Pg b/rt/etc/upgrade/3.8.3/schema.Pg
deleted file mode 100644
index bbe5536..0000000
--- a/rt/etc/upgrade/3.8.3/schema.Pg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers(GroupId, MemberId);
-
diff --git a/rt/etc/upgrade/3.8.4/content b/rt/etc/upgrade/3.8.4/content
deleted file mode 100644
index be5a6bf..0000000
--- a/rt/etc/upgrade/3.8.4/content
+++ /dev/null
@@ -1,59 +0,0 @@
-
-@Final = (
- sub {
- $RT::Logger->debug("Going to correct arguments of NotifyGroup actions if you have any");
- use strict;
-
- my $actions = RT::ScripActions->new( $RT::SystemUser );
- $actions->Limit(
- FIELD => 'ExecModule',
- VALUE => 'NotifyGroup',
- );
- $actions->Limit(
- FIELD => 'ExecModule',
- VALUE => 'NotifyGroupAsComment',
- );
-
- my $converter = sub {
- my $arg = shift;
- my @res;
- foreach my $r ( @{ $arg } ) {
- my $obj;
- next unless $r->{'Type'};
- if( lc $r->{'Type'} eq 'user' ) {
- $obj = RT::User->new( $RT::SystemUser );
- } elsif ( lc $r->{'Type'} eq 'group' ) {
- $obj = RT::Group->new( $RT::SystemUser );
- } else {
- next;
- }
- $obj->Load( $r->{'Instance'} );
- my $id = $obj->id;
- next unless( $id );
-
- push @res, $id;
- }
-
- return join ',', @res;
- };
-
- require Storable;
- while ( my $action = $actions->Next ) {
- my $argument = $action->Argument;
- my $new = '';
- local $@;
- if ( my $struct = eval { Storable::thaw( $argument ) } ) {
- $new = $converter->( $struct );
- } else {
- $new = join /, /, grep length, split /[^0-9]+/, $argument;
- }
- next if $new eq $argument;
-
- my ($status, $msg) = $action->__Set( Field => 'Argument', Value => $new );
- $RT::Logger->warning( "Couldn't change argument value of the action: $msg" )
- unless $status;
- }
- },
-);
-
-
diff --git a/rt/etc/upgrade/3.8.6/content b/rt/etc/upgrade/3.8.6/content
deleted file mode 100644
index a9793c6..0000000
--- a/rt/etc/upgrade/3.8.6/content
+++ /dev/null
@@ -1,10 +0,0 @@
-@Templates = (
- { Queue => 0,
- Name => "Forward Ticket", # loc
- Description => "Heading of a forwarded Ticket", # loc
- Content => q{
-
-This is a forward of ticket #{ $Ticket->id }
-}
- },
-);
diff --git a/rt/etc/upgrade/3.8.8/content b/rt/etc/upgrade/3.8.8/content
deleted file mode 100644
index ee19433..0000000
--- a/rt/etc/upgrade/3.8.8/content
+++ /dev/null
@@ -1,38 +0,0 @@
-@Initial = (
- sub {
- # make sure global CFs are not applied to local objects
- my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser );
- $ocfs->Limit( FIELD => 'ObjectId', OPERATOR => '!=', VALUE => 0 );
- my $alias = $ocfs->Join(
- FIELD1 => 'CustomField',
- TABLE2 => 'ObjectCustomFields',
- FIELD2 => 'CustomField',
- );
- $ocfs->Limit( ALIAS => $alias, FIELD => 'ObjectId', VALUE => 0 );
- while ( my $ocf = $ocfs->Next ) {
- $ocf->Delete;
- }
- },
- sub {
- # sort SortOrder
- my $sth = $RT::Handle->dbh->prepare(
- "SELECT cfs.LookupType, ocfs.id"
- ." FROM ObjectCustomFields ocfs, CustomFields cfs"
- ." WHERE cfs.id = ocfs.CustomField"
- ." ORDER BY cfs.LookupType, ocfs.SortOrder, cfs.Name"
- );
- $sth->execute;
-
- my ($i, $prev_type) = (0, '');
- while ( my ($lt, $id) = $sth->fetchrow_array ) {
- $i = 0 if $prev_type ne $lt;
- my $ocf = RT::ObjectCustomField->new( $RT::SystemUser );
- $ocf->Load( $id );
- my ($status, $msg) = $ocf->SetSortOrder( $i++ );
- $RT::Logger->warning("Couldn't set SortOrder: $msg")
- unless $status;
- $prev_type = $lt;
- }
- },
-);
-
diff --git a/rt/etc/upgrade/shrink_cgm_table.pl b/rt/etc/upgrade/shrink_cgm_table.pl
deleted file mode 100644
index 3d153c7..0000000
--- a/rt/etc/upgrade/shrink_cgm_table.pl
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/perl
-
-use 5.8.3;
-use strict;
-use warnings;
-
-use RT;
-RT::LoadConfig();
-RT->Config->Set('LogToScreen' => 'debug');
-RT::Init();
-
-use RT::CachedGroupMembers;
-my $cgms = RT::CachedGroupMembers->new( $RT::SystemUser );
-$cgms->Limit(
- FIELD => 'id',
- OPERATOR => '!=',
- VALUE => 'main.Via',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'AND',
-);
-$cgms->FindAllRows;
-
-my $alias = $cgms->Join(
- TYPE => 'LEFT',
- FIELD1 => 'Via',
- TABLE2 => 'CachedGroupMembers',
- FIELD2 => 'id',
-);
-$cgms->Limit(
- ALIAS => $alias,
- FIELD => 'MemberId',
- OPERATOR => '=',
- VALUE => $alias .'.GroupId',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'AND',
-);
-$cgms->Limit(
- ALIAS => $alias,
- FIELD => 'id',
- OPERATOR => '=',
- VALUE => $alias .'.Via',
- QUOTEVALUE => 0,
- ENTRYAGGREGATOR => 'AND',
-);
-
-FetchNext( $cgms, 'init' );
-while ( my $rec = FetchNext( $cgms ) ) {
- $RT::Handle->BeginTransaction;
- my ($status) = $rec->Delete;
- unless ($status) {
- print STDERR "Couldn't delete CGM #". $rec->id;
- exit 1;
- }
- $RT::Handle->Commit;
-}
-
-use constant PAGE_SIZE => 1000;
-sub FetchNext {
- my ($objs, $init) = @_;
- if ( $init ) {
- $objs->RowsPerPage( PAGE_SIZE );
- $objs->FirstPage;
- return;
- }
-
- my $obj = $objs->Next;
- return $obj if $obj;
- $objs->RedoSearch;
- $objs->FirstPage;
- return $objs->Next;
-}
-
diff --git a/rt/etc/upgrade/split-out-cf-categories b/rt/etc/upgrade/split-out-cf-categories
deleted file mode 100755
index d4077ce..0000000
--- a/rt/etc/upgrade/split-out-cf-categories
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "local/lib";
-use lib "lib";
-
-use RT;
-RT::LoadConfig();
-RT->Config->Set('LogToScreen' => 'debug');
-RT::Init();
-
-$| = 1;
-
-$RT::Handle->BeginTransaction();
-
-use RT::CustomFields;
-my $CFs = RT::CustomFields->new( $RT::SystemUser );
-$CFs->UnLimit;
-$CFs->Limit( FIELD => 'Type', VALUE => 'Select' );
-
-my $seen;
-while (my $cf = $CFs->Next ) {
- next if $cf->BasedOnObj->Id;
- my @categories;
- my %mapping;
- my $values = $cf->Values;
- while (my $value = $values->Next) {
- next unless defined $value->Category and length $value->Category;
- push @categories, $value->Category unless grep {$_ eq $value->Category} @categories;
- $mapping{$value->Name} = $value->Category;
- }
- next unless @categories;
-
- $seen++;
- print "Found CF '@{[$cf->Name]}' with categories:\n";
- print " $_\n" for @categories;
-
- print "Split this CF's categories into a hierarchical custom field (Y/n)? ";
- my $dothis = <>;
- next if $dothis =~ /n/i;
-
- print "Enter name of CF to create as category ('@{[$cf->Name]} category'): ";
- my $newname = <>;
- chomp $newname;
- $newname = $cf->Name . " category" unless length $newname;
-
- # bump the CF's sort oder up by one
- $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 );
-
- # ..and add a new CF before it
- my $new = RT::CustomField->new( $RT::SystemUser );
- my ($id, $msg) = $new->Create(
- Name => $newname,
- Type => 'Select',
- MaxValues => 1,
- LookupType => $cf->LookupType,
- SortOrder => $cf->SortOrder - 1,
- );
- die "Can't create custom field '$newname': $msg" unless $id;
-
- # Set the CF to be based on what we just made
- $cf->SetBasedOn( $new->Id );
-
- # Apply it to all of the same things
- {
- my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser );
- $ocfs->LimitToCustomField( $cf->Id );
- while (my $ocf = $ocfs->Next) {
- my $newocf = RT::ObjectCustomField->new( $RT::SystemUser );
- ($id, $msg) = $newocf->Create(
- SortOrder => $ocf->SortOrder,
- CustomField => $new->Id,
- ObjectId => $ocf->ObjectId,
- );
- die "Can't create ObjectCustomField: $msg" unless $id;
- }
- }
-
- # Copy over all of the rights
- {
- my $acl = RT::ACL->new( $RT::SystemUser );
- $acl->LimitToObject( $cf );
- while (my $ace = $acl->Next) {
- my $newace = RT::ACE->new( $RT::SystemUser );
- ($id, $msg) = $newace->Create(
- PrincipalId => $ace->PrincipalId,
- PrincipalType => $ace->PrincipalType,
- RightName => $ace->RightName,
- Object => $new,
- );
- die "Can't assign rights: $msg" unless $id;
- }
- }
-
- # Add values for all of the categories
- for my $i (0..$#categories) {
- ($id, $msg) = $new->AddValue(
- Name => $categories[$i],
- SortOrder => $i + 1,
- );
- die "Can't create custom field value: $msg" unless $id;
- }
-
- # Grovel through all ObjectCustomFieldValues, and add the
- # appropriate category
- {
- my $ocfvs = RT::ObjectCustomFieldValues->new( $RT::SystemUser );
- $ocfvs->LimitToCustomField( $cf->Id );
- while (my $ocfv = $ocfvs->Next) {
- next unless exists $mapping{$ocfv->Content};
- my $newocfv = RT::ObjectCustomFieldValue->new( $RT::SystemUser );
- ($id, $msg) = $newocfv->Create(
- CustomField => $new->Id,
- ObjectType => $ocfv->ObjectType,
- ObjectId => $ocfv->ObjectId,
- Content => $mapping{$ocfv->Content},
- );
- }
- }
-}
-
-$RT::Handle->Commit;
-print "No custom fields with categories found\n" unless $seen;
diff --git a/rt/etc/upgrade/split-out-cf-categories.in b/rt/etc/upgrade/split-out-cf-categories.in
deleted file mode 100644
index f34a1b6..0000000
--- a/rt/etc/upgrade/split-out-cf-categories.in
+++ /dev/null
@@ -1,171 +0,0 @@
-#!@PERL@
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2008 Best Practical Solutions, LLC
-# <jesse@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "@LOCAL_LIB_PATH@";
-use lib "@RT_LIB_PATH@";
-
-use RT;
-RT::LoadConfig();
-RT->Config->Set('LogToScreen' => 'debug');
-RT::Init();
-
-$| = 1;
-
-$RT::Handle->BeginTransaction();
-
-use RT::CustomFields;
-my $CFs = RT::CustomFields->new( $RT::SystemUser );
-$CFs->UnLimit;
-$CFs->Limit( FIELD => 'Type', VALUE => 'Select' );
-
-my $seen;
-while (my $cf = $CFs->Next ) {
- next if $cf->BasedOnObj->Id;
- my @categories;
- my %mapping;
- my $values = $cf->Values;
- while (my $value = $values->Next) {
- next unless defined $value->Category and length $value->Category;
- push @categories, $value->Category unless grep {$_ eq $value->Category} @categories;
- $mapping{$value->Name} = $value->Category;
- }
- next unless @categories;
-
- $seen++;
- print "Found CF '@{[$cf->Name]}' with categories:\n";
- print " $_\n" for @categories;
-
- print "Split this CF's categories into a hierarchical custom field (Y/n)? ";
- my $dothis = <>;
- next if $dothis =~ /n/i;
-
- print "Enter name of CF to create as category ('@{[$cf->Name]} category'): ";
- my $newname = <>;
- chomp $newname;
- $newname = $cf->Name . " category" unless length $newname;
-
- # bump the CF's sort oder up by one
- $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 );
-
- # ..and add a new CF before it
- my $new = RT::CustomField->new( $RT::SystemUser );
- my ($id, $msg) = $new->Create(
- Name => $newname,
- Type => 'Select',
- MaxValues => 1,
- LookupType => $cf->LookupType,
- SortOrder => $cf->SortOrder - 1,
- );
- die "Can't create custom field '$newname': $msg" unless $id;
-
- # Set the CF to be based on what we just made
- $cf->SetBasedOn( $new->Id );
-
- # Apply it to all of the same things
- {
- my $ocfs = RT::ObjectCustomFields->new( $RT::SystemUser );
- $ocfs->LimitToCustomField( $cf->Id );
- while (my $ocf = $ocfs->Next) {
- my $newocf = RT::ObjectCustomField->new( $RT::SystemUser );
- ($id, $msg) = $newocf->Create(
- SortOrder => $ocf->SortOrder,
- CustomField => $new->Id,
- ObjectId => $ocf->ObjectId,
- );
- die "Can't create ObjectCustomField: $msg" unless $id;
- }
- }
-
- # Copy over all of the rights
- {
- my $acl = RT::ACL->new( $RT::SystemUser );
- $acl->LimitToObject( $cf );
- while (my $ace = $acl->Next) {
- my $newace = RT::ACE->new( $RT::SystemUser );
- ($id, $msg) = $newace->Create(
- PrincipalId => $ace->PrincipalId,
- PrincipalType => $ace->PrincipalType,
- RightName => $ace->RightName,
- Object => $new,
- );
- die "Can't assign rights: $msg" unless $id;
- }
- }
-
- # Add values for all of the categories
- for my $i (0..$#categories) {
- ($id, $msg) = $new->AddValue(
- Name => $categories[$i],
- SortOrder => $i + 1,
- );
- die "Can't create custom field value: $msg" unless $id;
- }
-
- # Grovel through all ObjectCustomFieldValues, and add the
- # appropriate category
- {
- my $ocfvs = RT::ObjectCustomFieldValues->new( $RT::SystemUser );
- $ocfvs->LimitToCustomField( $cf->Id );
- while (my $ocfv = $ocfvs->Next) {
- next unless exists $mapping{$ocfv->Content};
- my $newocfv = RT::ObjectCustomFieldValue->new( $RT::SystemUser );
- ($id, $msg) = $newocfv->Create(
- CustomField => $new->Id,
- ObjectType => $ocfv->ObjectType,
- ObjectId => $ocfv->ObjectId,
- Content => $mapping{$ocfv->Content},
- );
- }
- }
-}
-
-$RT::Handle->Commit;
-print "No custom fields with categories found\n" unless $seen; \ No newline at end of file
diff --git a/rt/etc/upgrade/upgrade-mysql-schema.pl b/rt/etc/upgrade/upgrade-mysql-schema.pl
deleted file mode 100755
index bc59c97..0000000
--- a/rt/etc/upgrade/upgrade-mysql-schema.pl
+++ /dev/null
@@ -1,390 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-use DBI;
-use DBD::mysql 4.002;
-
-unless (@ARGV) {
- print STDERR "usage: $0 db_name[:server_name] db_user db_password\n";
- exit 1;
-}
-
-# pretty correct support of charsets has been introduced in mysql 4.1
-# as RT doesn't use it may result in issues:
-# 1) data corruptions when default charset of mysql server has data restrictions like utf8
-# 2) wrong ordering (collations)
-
-# we have to define correct types for all columns. RT uses UTF-8, ascii and binary.
-# * ascii is subset of many mysql's charsets except may be one or two rare where some ascii
-# characters replaced with local
-# * for many charsets mysql allows us to store any octets sequences even when those are
-# invalid for this particula set, for example we can store UTF-8 data in latin1
-# column and fetch it as UTF-8, however sorting will be wrong
-
-# here is tricky algorithm to change column to desired charset:
-# * text to binary convertion is pretty straight forward except that text types
-# have length definitions in terms of characters and in some cases we must
-# use longer binary types to satisfy space requirements
-# * binary to text is much easier as we know that there is ascii or UTF-8 then
-# we just make convertion, also 32 chars are long enough to store 32 bytes, so
-# length changes is not required
-# * text to text convertion is trickier. no matter what is the current character set
-# of the column we know that there is either ascii or UTF-8, so we can not use
-# direct convertion, instead we do text to binary plus binary to text convertion
-# instead
-# * as well we add charset definition for all tables and for the DB as well,
-# so all new columns by default will be in UTF-8 charset
-
-my @tables = qw(
- ACL
- Attachments
- Attributes
- CustomFields
- CustomFieldValues
- GroupMembers
- Groups
- Links
- ObjectCustomFields
- ObjectCustomFieldValues
- Principals
- Queues
- ScripActions
- ScripConditions
- Scrips
- sessions
- Templates
- Tickets
- Transactions
- Users
-);
-
-my %charset = (
- ACL => {
- RightName => 'ascii',
- ObjectType => 'ascii',
- PrincipalType => 'ascii',
- },
- Attachments => {
- MessageId => 'ascii',
- Subject => 'utf8',
- Filename => 'utf8',
- ContentType => 'ascii',
- ContentEncoding => 'ascii',
- Content => 'binary',
- Headers => 'utf8',
- },
- Attributes => {
- Name => 'utf8',
- Description => 'utf8',
- Content => 'binary',
- ContentType => 'ascii',
- ObjectType => 'ascii',
- },
- CustomFields => {
- Name => 'utf8',
- Type => 'ascii',
- Pattern => 'utf8',
- Description => 'utf8',
- LookupType => 'ascii',
- },
- CustomFieldValues => {
- Name => 'utf8',
- Description => 'utf8',
- },
- Groups => {
- Name => 'utf8',
- Description => 'utf8',
- Domain => 'ascii',
- Type => 'ascii',
- },
- Links => {
- Base => 'ascii',
- Target => 'ascii',
- Type => 'ascii',
- },
- ObjectCustomFieldValues => {
- ObjectType => 'ascii',
- Content => 'utf8',
- LargeContent => 'binary',
- ContentType => 'ascii',
- ContentEncoding => 'ascii',
- },
- Principals => {
- PrincipalType => 'ascii',
- },
- Queues => {
- Name => 'utf8',
- Description => 'utf8',
- CorrespondAddress => 'ascii',
- CommentAddress => 'ascii',
- },
- ScripActions => {
- Name => 'utf8',
- Description => 'utf8',
- ExecModule => 'ascii',
- Argument => 'binary',
- },
- ScripConditions => {
- Name => 'utf8',
- Description => 'utf8',
- ExecModule => 'ascii',
- Argument => 'binary',
- ApplicableTransTypes => 'ascii',
- },
- Scrips => {
- Description => 'utf8',
- ConditionRules => 'utf8',
- ActionRules => 'utf8',
- CustomIsApplicableCode => 'utf8',
- CustomPrepareCode => 'utf8',
- CustomCommitCode => 'utf8',
- Stage => 'ascii',
- },
- sessions => {
- id => 'binary', # ascii?
- a_session => 'binary',
- },
- Templates => {
- Name => 'utf8',
- Description => 'utf8',
- Type => 'ascii',
- Language => 'ascii',
- Content => 'utf8',
- },
- Tickets => {
- Type => 'ascii',
- Subject => 'utf8',
- Status => 'ascii',
- },
- Transactions => {
- ObjectType => 'ascii',
- Type => 'ascii',
- Field => 'ascii',
- OldValue => 'utf8',
- NewValue => 'utf8',
- ReferenceType => 'ascii',
- Data => 'utf8',
- },
- Users => {
- Name => 'utf8',
- Password => 'binary',
- Comments => 'utf8',
- Signature => 'utf8',
- EmailAddress => 'ascii',
- FreeformContactInfo => 'utf8',
- Organization => 'utf8',
- RealName => 'utf8',
- NickName => 'utf8',
- Lang => 'ascii',
- EmailEncoding => 'ascii',
- WebEncoding => 'ascii',
- ExternalContactInfoId => 'utf8',
- ContactInfoSystem => 'utf8',
- ExternalAuthId => 'utf8',
- AuthSystem => 'utf8',
- Gecos => 'utf8',
- HomePhone => 'utf8',
- WorkPhone => 'utf8',
- MobilePhone => 'utf8',
- PagerPhone => 'utf8',
- Address1 => 'utf8',
- Address2 => 'utf8',
- City => 'utf8',
- State => 'utf8',
- Zip => 'utf8',
- Country => 'utf8',
- Timezone => 'ascii',
- PGPKey => 'binary',
- },
-);
-
-my %max_type_length = (
- char => int 1<<8,
- varchar => int 1<<8,
- tinytext => int 1<<8,
- mediumtext => int 1<<16,
- text => int 1<<24,
- longtext => int 1<<32,
-);
-
-my @sql_commands;
-
-my ($db_datasource, $db_user, $db_pass) = (shift, shift, shift);
-my $dbh = DBI->connect("dbi:mysql:$db_datasource", $db_user, $db_pass, { RaiseError => 1 });
-my $db_name = $db_datasource;
-$db_name =~ s/:.*$//;
-
-my $version = ($dbh->selectrow_array("show variables like 'version'"))[1];
-($version) = $version =~ /^(\d+\.\d+)/;
-
-push @sql_commands, qq{ALTER DATABASE $db_name DEFAULT CHARACTER SET utf8};
-convert_table($_) foreach @tables;
-
-print join "\n", map(/;$/? $_ : "$_;", @sql_commands), "";
-my $use_p = $db_pass ? " -p" : '';
-print STDERR <<ENDREMINDER;
--- ** NOTICE: No database changes have been made. **
--- Please review the generated SQL, ensure you have a full backup of your database
--- and apply it to your database using a command like:
--- mysql -u ${db_user}${use_p} $db_name < queries.sql";
-ENDREMINDER
-exit 0;
-
-my %alter_aggregator;
-sub convert_table {
- my $table = shift;
- @alter_aggregator{'char_to_binary','binary_to_char'} = (['DEFAULT CHARACTER SET utf8'],[]);
-
- my $sth = $dbh->column_info( undef, $db_name, $table, undef );
- $sth->execute;
- while ( my $info = $sth->fetchrow_hashref ) {
- convert_column(%$info);
- }
- for my $conversiontype (qw(char_to_binary binary_to_char)) {
- next unless @{$alter_aggregator{$conversiontype}};
- push @sql_commands, qq{ALTER TABLE $table\n }.
- join(",\n ",@{$alter_aggregator{$conversiontype}});
- }
-}
-
-sub convert_column {
- my %info = @_;
- my $table = $info{'TABLE_NAME'};
- my $column = $info{'COLUMN_NAME'};
- my $type = $info{'TYPE_NAME'};
- return unless $type =~ /(CHAR|TEXT|BLOB|BINARY)$/i;
-
- my $required_charset = $charset{$table}{$column};
- unless ( $required_charset ) {
- print STDERR join(".", @info{'TABLE_SCHEMA', 'TABLE_NAME', 'COLUMN_NAME'})
- ." has type $type however mapping is missing.\n";
- return;
- }
-
- my $collation = column_info($table, $column)->{'collation'};
- # mysql 4.1 returns literal NULL instead of undef
- my $current_charset = $collation && $collation ne 'NULL'? (split /_/, $collation)[0]: 'binary';
- return if $required_charset eq $current_charset;
-
- if ( $required_charset eq 'binary' ) {
- char_to_binary(%info);
- }
- elsif ( $current_charset eq 'binary' ) {
- binary_to_char( $required_charset, %info);
- } else {
- char_to_char( $required_charset, %info);
- }
-}
-
-sub char_to_binary {
- my %info = @_;
-
- my $table = $info{'TABLE_NAME'};
- my $column = $info{'COLUMN_NAME'};
- my $new_type = calc_suitable_binary_type(%info);
- push @{$alter_aggregator{char_to_binary}},
- "MODIFY $column $new_type ".build_column_definition(%info);
-
-}
-
-sub binary_to_char {
- my ($charset, %info) = @_;
-
- my $table = $info{'TABLE_NAME'};
- my $column = $info{'COLUMN_NAME'};
- my $new_type = lc $info{'TYPE_NAME'};
- if ( $new_type =~ /binary/ ) {
- $new_type =~ s/binary/char/;
- $new_type .= '('. $info{'COLUMN_SIZE'} .')';
- } else {
- $new_type =~ s/blob/text/;
- }
-
- push @{$alter_aggregator{binary_to_char}},
- "MODIFY $column ". uc($new_type) ." CHARACTER SET ". $charset
- ." ". build_column_definition(%info);
-}
-
-sub char_to_char {
- my ($charset, %info) = @_;
-
- my $table = $info{'TABLE_NAME'};
- my $column = $info{'COLUMN_NAME'};
- my $new_type = $info{'mysql_type_name'};
-
- char_to_binary(%info);
- push @{$alter_aggregator{binary_to_char}},
- "MODIFY $column ". uc($new_type)." CHARACTER SET ". $charset
- ." ". build_column_definition(%info);
-}
-
-sub calc_suitable_binary_type {
- my %info = @_;
- my $type = lc $info{'TYPE_NAME'};
- return 'LONGBLOB' if $type eq 'longtext';
-
- my $current_max_byte_length = column_byte_length(@info{qw(TABLE_NAME COLUMN_NAME)}) || 0;
- if ( $max_type_length{ $type } > $current_max_byte_length ) {
- if ( $type eq 'varchar' || $type eq 'char' ) {
- my $new_type = $type;
- $new_type =~ s/char/binary/;
- $new_type .= $info{'COLUMN_SIZE'} >= $current_max_byte_length
- ? '('. $info{'COLUMN_SIZE'} .')'
- : '('. $current_max_byte_length .')';
- return uc $new_type;
- } else {
- my $new_type = $type;
- $new_type =~ s/text/blob/;
- return uc $new_type;
- }
- } else {
- my $new_type;
- foreach ( sort { $max_type_length{$a} <=> $max_type_length{$b} } keys %max_type_length ) {
- next if $max_type_length{ $_ } <= $current_max_byte_length;
-
- $new_type = $_; last;
- }
- $new_type =~ s/text/blob/;
- return uc $new_type;
- }
-}
-
-sub build_column_definition {
- my %info = @_;
-
- my $res = '';
- $res .= 'NOT ' unless $info{'NULLABLE'};
- $res .= 'NULL';
- my $default = column_info(@info{qw(TABLE_NAME COLUMN_NAME)})->{default};
- if ( defined $default ) {
- $res .= ' DEFAULT '. $dbh->quote($default);
- } elsif ( $info{'NULLABLE'} ) {
- $res .= ' DEFAULT NULL';
- }
- $res .= ' AUTO_INCREMENT' if $info{'mysql_is_auto_increment'};
- return $res;
-}
-
-sub column_byte_length {
- my ($table, $column) = @_;
- if ( $version >= 5.0 ) {
- my ($char, $octet) = @{ $dbh->selectrow_arrayref(
- "SELECT CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH FROM information_schema.COLUMNS WHERE"
- ." TABLE_SCHEMA = ". $dbh->quote($db_name)
- ." AND TABLE_NAME = ". $dbh->quote($table)
- ." AND COLUMN_NAME = ". $dbh->quote($column)
- ) };
- return $octet if $octet == $char;
- }
- return $dbh->selectrow_arrayref("SELECT MAX(LENGTH(". $dbh->quote_identifier($column) .")) FROM $table")->[0];
-}
-
-sub column_info {
- my ($table, $column) = @_;
- # XXX: DBD::mysql doesn't provide this info, may be will do in 4.0007 if I'll write a patch
- local $dbh->{FetchHashKeyName} = 'NAME_lc';
- return $dbh->selectrow_hashref("SHOW FULL COLUMNS FROM $table LIKE " . $dbh->quote($column));
-}
-