[Rt-commit] rt branch, 3.9-attributes_as_columns, updated. rt-3.9.4-497-g256e3c8
Ruslan Zakirov
ruz at bestpractical.com
Fri Nov 19 06:03:30 EST 2010
The branch, 3.9-attributes_as_columns has been updated
via 256e3c83b637af44c52939497096efa28ff7495e (commit)
via c24b050cc5bab9b111baca6c6863cc0556923b17 (commit)
via c5a5b32566a5d794ffc9b75e689dfbc77adfcb4d (commit)
via 5868f2faa6e848fa7c733d739739b5f8d77ca7a9 (commit)
via 0a80a9690d9446dbcdccdc9d384b1201bdd55cd1 (commit)
from 4c6e634f7357aa462c77688281a5a88d6e42cf15 (commit)
Summary of changes:
etc/schema.Oracle | 1 +
etc/schema.Pg | 1 +
etc/schema.SQLite | 1 +
etc/schema.mysql | 1 +
etc/upgrade/3.9.7/content | 12 ++++++++
etc/upgrade/3.9.7/schema.Oracle | 1 +
etc/upgrade/3.9.7/schema.Pg | 1 +
etc/upgrade/3.9.7/schema.SQLite | 1 +
etc/upgrade/3.9.7/schema.mysql | 1 +
lib/RT/CustomField_Overlay.pm | 56 +++++++++++++++++++++++++--------------
t/customfields/external.t | 5 ++-
11 files changed, 59 insertions(+), 22 deletions(-)
- Log -----------------------------------------------------------------
commit 0a80a9690d9446dbcdccdc9d384b1201bdd55cd1
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Nov 19 13:57:57 2010 +0300
CustomFields.ValuesClass column
diff --git a/etc/schema.Oracle b/etc/schema.Oracle
index ad3bb3d..2384d13 100755
--- a/etc/schema.Oracle
+++ b/etc/schema.Oracle
@@ -357,6 +357,7 @@ CREATE TABLE CustomFields (
MaxValues NUMBER(11,0) DEFAULT 0 NOT NULL,
Pattern CLOB,
Repeated NUMBER(11,0) DEFAULT 0 NOT NULL,
+ ValuesClass VARCHAR2(64),
BasedOn NUMBER(11,0) NULL,
Description VARCHAR2(255),
SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL,
diff --git a/etc/schema.Pg b/etc/schema.Pg
index 6351a84..b3c0534 100755
--- a/etc/schema.Pg
+++ b/etc/schema.Pg
@@ -542,6 +542,7 @@ CREATE TABLE CustomFields (
RenderType varchar(64) NULL ,
MaxValues integer NOT NULL DEFAULT 0 ,
Repeated integer NOT NULL DEFAULT 0 ,
+ ValuesClass varchar(64) NULL ,
BasedOn integer NULL,
Pattern varchar(65536) NULL ,
LookupType varchar(255) NOT NULL ,
diff --git a/etc/schema.SQLite b/etc/schema.SQLite
index 88725cd..e31594e 100755
--- a/etc/schema.SQLite
+++ b/etc/schema.SQLite
@@ -380,6 +380,7 @@ CREATE TABLE CustomFields (
Pattern varchar(65536) NULL , # New -- Must validate against this
Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry
BasedOn INTEGER NULL,
+ ValuesClass varchar(64) NULL ,
Description varchar(255) NULL ,
SortOrder integer NOT NULL DEFAULT 0 ,
LookupType varchar(255) NOT NULL,
diff --git a/etc/schema.mysql b/etc/schema.mysql
index c5aac29..4814ecb 100755
--- a/etc/schema.mysql
+++ b/etc/schema.mysql
@@ -358,6 +358,7 @@ CREATE TABLE CustomFields (
Pattern TEXT NULL , # New -- Must validate against this
Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry
BasedOn INTEGER NULL,
+ ValuesClass varchar(64) CHARACTER SET ascii NULL ,
Description varchar(255) NULL ,
SortOrder integer NOT NULL DEFAULT 0 ,
LookupType varchar(255) CHARACTER SET ascii NOT NULL,
commit 5868f2faa6e848fa7c733d739739b5f8d77ca7a9
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Nov 19 13:58:24 2010 +0300
add CustomFields.ValuesClass on upgrade
diff --git a/etc/upgrade/3.9.7/schema.Oracle b/etc/upgrade/3.9.7/schema.Oracle
index 5bed834..6b8adbd 100644
--- a/etc/upgrade/3.9.7/schema.Oracle
+++ b/etc/upgrade/3.9.7/schema.Oracle
@@ -1,4 +1,5 @@
ALTER TABLE Users ADD COLUMN AuthToken VARCHAR2(16) NULL;
ALTER TABLE CustomFields ADD COLUMN BasedOn NUMBER(11,0) NULL;
ALTER TABLE CustomFields ADD COLUMN RenderType VARCHAR2(64) NULL;
+ALTER TABLE CustomFields ADD COLUMN ValuesClass VARCHAR2(64) NULL;
ALTER TABLE Queues ADD COLUMN SubjectTag VARCHAR2(120) NULL;
diff --git a/etc/upgrade/3.9.7/schema.Pg b/etc/upgrade/3.9.7/schema.Pg
index d6f7172..2967aa2 100644
--- a/etc/upgrade/3.9.7/schema.Pg
+++ b/etc/upgrade/3.9.7/schema.Pg
@@ -1,4 +1,5 @@
ALTER TABLE Users ADD COLUMN AuthToken VARCHAR(16) NULL;
ALTER TABLE CustomFields ADD COLUMN BasedOn INTEGER NULL;
ALTER TABLE CustomFields ADD COLUMN RenderType VARCHAR(64) NULL;
+ALTER TABLE CustomFields ADD COLUMN ValuesClass VARCHAR(64) NULL;
ALTER TABLE Queues ADD COLUMN SubjectTag VARCHAR(120) NULL;
diff --git a/etc/upgrade/3.9.7/schema.SQLite b/etc/upgrade/3.9.7/schema.SQLite
index d6f7172..2967aa2 100644
--- a/etc/upgrade/3.9.7/schema.SQLite
+++ b/etc/upgrade/3.9.7/schema.SQLite
@@ -1,4 +1,5 @@
ALTER TABLE Users ADD COLUMN AuthToken VARCHAR(16) NULL;
ALTER TABLE CustomFields ADD COLUMN BasedOn INTEGER NULL;
ALTER TABLE CustomFields ADD COLUMN RenderType VARCHAR(64) NULL;
+ALTER TABLE CustomFields ADD COLUMN ValuesClass VARCHAR(64) NULL;
ALTER TABLE Queues ADD COLUMN SubjectTag VARCHAR(120) NULL;
diff --git a/etc/upgrade/3.9.7/schema.mysql b/etc/upgrade/3.9.7/schema.mysql
index 48acd99..ccb5ff2 100644
--- a/etc/upgrade/3.9.7/schema.mysql
+++ b/etc/upgrade/3.9.7/schema.mysql
@@ -1,4 +1,5 @@
ALTER TABLE Users ADD COLUMN AuthToken VARCHAR(16) CHARACTER SET ascii NULL;
ALTER TABLE CustomFields ADD COLUMN BasedOn INTEGER NULL;
ALTER TABLE CustomFields ADD COLUMN RenderType VARCHAR(64) NULL;
+ALTER TABLE CustomFields ADD COLUMN ValuesClass VARCHAR(64) CHARACTER SET ascii NULL;
ALTER TABLE Queues ADD COLUMN SubjectTag VARCHAR(120) NULL;
commit c5a5b32566a5d794ffc9b75e689dfbc77adfcb4d
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Nov 19 13:58:56 2010 +0300
set CustomFields.ValuesClass from Attributes table
diff --git a/etc/upgrade/3.9.7/content b/etc/upgrade/3.9.7/content
index 6d2d5db..daf9c22 100644
--- a/etc/upgrade/3.9.7/content
+++ b/etc/upgrade/3.9.7/content
@@ -29,6 +29,18 @@ my $move_attributes = sub {
return $move_attributes->( 'CustomFields', 'RT::CustomField', 'RenderType');
},
sub {
+ $move_attributes->( 'CustomFields', 'RT::CustomField', 'ValuesClass')
+ or return;
+
+ my $query = "UPDATE CustomFields SET ValuesClass = NULL WHERE ValuesClass = ?";
+ my $res = $RT::Handle->SimpleQuery( $query, 'RT::CustomFieldValues' );
+ unless ( $res ) {
+ $RT::Logger->error("Failed to replace default with NULLs");
+ return;
+ }
+ return 1;
+ },
+ sub {
my $attr = RT->System->FirstAttribute('BrandedSubjectTag');
return 1 unless $attr;
commit c24b050cc5bab9b111baca6c6863cc0556923b17
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Nov 19 14:00:10 2010 +0300
use CustomFields.Values class instead of attributes
diff --git a/lib/RT/CustomField_Overlay.pm b/lib/RT/CustomField_Overlay.pm
index 44a9d86..5832182 100755
--- a/lib/RT/CustomField_Overlay.pm
+++ b/lib/RT/CustomField_Overlay.pm
@@ -339,7 +339,16 @@ sub Create {
return (0, $self->loc("Invalid Render Type") )
unless grep $_ eq $args{'RenderType'}, $self->RenderTypes( $composite );
}
+ }
+
+ $args{'ValuesClass'} = undef if ($args{'ValuesClass'} || '') eq 'RT::CustomFieldValues';
+ if ( $args{'ValuesClass'} ||= undef ) {
+ return (0, $self->loc("This Custom Field can not have list of values"))
+ unless $self->IsSelectionType( $args{'Type'} );
+ unless ( $self->ValidateValuesClass( $args{'ValuesClass'} ) ) {
+ return (0, $self->loc("Invalid Custom Field values source"));
+ }
}
(my $rv, $msg) = $self->SUPER::Create(
@@ -349,6 +358,7 @@ sub Create {
MaxValues => $args{'MaxValues'},
Pattern => $args{'Pattern'},
BasedOn => $args{'BasedOn'},
+ ValuesClass => $args{'ValuesClass'},
Description => $args{'Description'},
Disabled => $args{'Disabled'},
LookupType => $args{'LookupType'},
@@ -363,10 +373,6 @@ sub Create {
$self->SetIncludeContentForValue($args{'IncludeContentForValue'});
}
- if ( exists $args{'ValuesClass'} ) {
- $self->SetValuesClass( $args{'ValuesClass'} );
- }
-
return ($rv, $msg) unless exists $args{'Queue'};
# Compat code -- create a new ObjectCustomField mapping
@@ -487,8 +493,10 @@ of the C<ValuesClass> method.
sub Values {
my $self = shift;
- my $class = $self->ValuesClass || 'RT::CustomFieldValues';
- eval "require $class" or die "$@";
+ my $class = $self->ValuesClass;
+ if ( $class ne 'RT::CustomFieldValues') {
+ eval "require $class" or die "$@";
+ }
my $cf_values = $class->new( $self->CurrentUser );
# if the user has no rights, return an empty object
if ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) {
@@ -612,31 +620,39 @@ sub IsSelectionType {
sub IsExternalValues {
my $self = shift;
- my $selectable = $self->IsSelectionType( @_ );
- return $selectable unless $selectable;
-
- my $class = $self->ValuesClass;
- return 0 if $class eq 'RT::CustomFieldValues';
- return 1;
+ return 0 unless $self->IsSelectionType( @_ );
+ return $self->ValuesClass eq 'RT::CustomFieldValues'? 0 : 1;
}
sub ValuesClass {
my $self = shift;
- return '' unless $self->IsSelectionType;
-
- my $class = $self->FirstAttribute( 'ValuesClass' );
- $class = $class->Content if $class;
- return $class || 'RT::CustomFieldValues';
+ return $self->_Value( ValuesClass => @_ ) || 'RT::CustomFieldValues';
}
sub SetValuesClass {
my $self = shift;
my $class = shift || 'RT::CustomFieldValues';
+
+ if ( $class eq 'RT::CustomFieldValues' ) {
+ return $self->_Set( Field => 'ValuesClass', Value => undef, @_ );
+ }
+
+ return (0, $self->loc("This Custom Field can not have list of values"))
+ unless $self->IsSelectionType;
- if( $class eq 'RT::CustomFieldValues' ) {
- return $self->DeleteAttribute( 'ValuesClass' );
+ unless ( $self->ValidateValuesClass( $class ) ) {
+ return (0, $self->loc("Invalid Custom Field values source"));
}
- return $self->SetAttribute( Name => 'ValuesClass', Content => $class );
+ return $self->_Set( Field => 'ValuesClass', Value => $class, @_ );
+}
+
+sub ValidateValuesClass {
+ my $self = shift;
+ my $class = shift;
+
+ return 1 if $class eq 'RT::CustomFieldValues';
+ return 1 if grep $class eq $_, RT->Config->Get('CustomFieldValuesSources');
+ return undef;
}
commit 256e3c83b637af44c52939497096efa28ff7495e
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date: Fri Nov 19 14:00:32 2010 +0300
ValuesClass is validated against config, fix test
diff --git a/t/customfields/external.t b/t/customfields/external.t
index af5f884..0abf6ec 100644
--- a/t/customfields/external.t
+++ b/t/customfields/external.t
@@ -12,6 +12,7 @@ sub new (*) {
}
use constant VALUES_CLASS => 'RT::CustomFieldValues::Groups';
+RT->Config->Set(CustomFieldValuesSources => VALUES_CLASS);
my $q = new( RT::Queue );
isa_ok( $q, 'RT::Queue' );
@@ -27,8 +28,8 @@ my $cf = new( RT::CustomField );
isa_ok( $cf, 'RT::CustomField' );
{
- my ($cfid) = $cf->Create( %arg );
- ok( $cfid, "created cf" );
+ my ($cfid, $msg) = $cf->Create( %arg );
+ ok( $cfid, "created cf" ) or diag "error: $msg";
is( $cf->ValuesClass, VALUES_CLASS, "right values class" );
ok( $cf->IsExternalValues, "custom field has external values" );
}
-----------------------------------------------------------------------
More information about the Rt-commit
mailing list