[Rt-commit] r18638 - rt/3.999/branches/on-tisql/lib/RT/Model
ruz at bestpractical.com
ruz at bestpractical.com
Tue Mar 3 13:44:38 EST 2009
Author: ruz
Date: Tue Mar 3 13:44:38 2009
New Revision: 18638
Modified:
rt/3.999/branches/on-tisql/lib/RT/Model/Ticket.pm
Log:
* add links/linked_to/linked_from columns with tisql expressions to the ticket model
Modified: rt/3.999/branches/on-tisql/lib/RT/Model/Ticket.pm
==============================================================================
--- rt/3.999/branches/on-tisql/lib/RT/Model/Ticket.pm (original)
+++ rt/3.999/branches/on-tisql/lib/RT/Model/Ticket.pm Tue Mar 3 13:44:38 2009
@@ -82,6 +82,54 @@
sub table {'Tickets'}
+# A helper table for links mapping to make it easier
+# to build and parse links between tickets
+
+our %LINKTYPEMAP = (
+ MemberOf => {
+ type => 'MemberOf',
+ mode => 'target',
+ },
+ Parents => {
+ type => 'MemberOf',
+ mode => 'target',
+ },
+ Members => {
+ type => 'MemberOf',
+ mode => 'base',
+ },
+ Children => {
+ type => 'MemberOf',
+ mode => 'base',
+ },
+ HasMember => {
+ type => 'MemberOf',
+ mode => 'base',
+ },
+ RefersTo => {
+ type => 'RefersTo',
+ mode => 'target',
+ },
+ ReferredToBy => {
+ type => 'RefersTo',
+ mode => 'base',
+ },
+ DependsOn => {
+ type => 'DependsOn',
+ mode => 'target',
+ },
+ DependedOnBy => {
+ type => 'DependsOn',
+ mode => 'base',
+ },
+ MergedInto => {
+ type => 'MergedInto',
+ mode => 'target',
+ },
+
+);
+
+
use Jifty::DBI::Schema;
use Jifty::DBI::Record schema {
@@ -151,6 +199,47 @@
column recursive_groups_watching =>
references RT::Model::GroupCollection
by tisql => 'recursive_groups_watching.id = .role_groups{%1}.cgm.member_id';
+
+ column links =>
+ references RT::Model::LinkCollection
+ by tisql => sub {
+ my %args = (
+ parser => undef,
+ tisql => undef,
+ placeholders => undef,
+ @_
+ );
+
+ my $types = $args{'placeholders'}{'type'};
+ unless ( $types ) {
+ return query => '(links.local_base = .id OR links.local_target = .id) AND links.type = %type';
+ }
+
+ my $mode = '';
+ for my $type ( splice @$types ) {
+ die "'$type' is not correct type of a link for ticket"
+ unless my $meta = $LINKTYPEMAP{ $type };
+
+ if ( $mode && $mode ne $meta->{'mode'} ) {
+ die "Can not mix link types with different direction in one join";
+ }
+ $mode = $meta->{'mode'};
+ push @$types, $meta->{'type'};
+ }
+
+ if ( $mode eq 'base' ) {
+ return query => 'links.local_target = .id AND links.type = %type';
+ }
+ else {
+ return query => 'links.local_base = .id AND links.type = %type';
+ }
+ };
+ column links_to =>
+ references RT::Model::LinkCollection
+ by tisql => 'links.local_base = .id AND links.type = %type';
+ column links_from =>
+ references RT::Model::LinkCollection
+ by tisql => 'links.local_target = .id AND links.type = %type';
};
use Jifty::Plugin::ActorMetadata::Mixin::Model::ActorMetadata map => {
@@ -164,54 +253,6 @@
# A helper table for links mapping to make it easier
# to build and parse links between tickets
-our %LINKTYPEMAP = (
- MemberOf => {
- type => 'MemberOf',
- mode => 'target',
- },
- Parents => {
- type => 'MemberOf',
- mode => 'target',
- },
- Members => {
- type => 'MemberOf',
- mode => 'base',
- },
- Children => {
- type => 'MemberOf',
- mode => 'base',
- },
- HasMember => {
- type => 'MemberOf',
- mode => 'base',
- },
- RefersTo => {
- type => 'RefersTo',
- mode => 'target',
- },
- ReferredToBy => {
- type => 'RefersTo',
- mode => 'base',
- },
- DependsOn => {
- type => 'DependsOn',
- mode => 'target',
- },
- DependedOnBy => {
- type => 'DependsOn',
- mode => 'base',
- },
- MergedInto => {
- type => 'MergedInto',
- mode => 'target',
- },
-
-);
-
-
-# A helper table for links mapping to make it easier
-# to build and parse links between tickets
-
our %LINKDIRMAP = (
MemberOf => {
base => 'MemberOf',
More information about the Rt-commit
mailing list