rt 4.0.23
[freeside.git] / rt / lib / RT / URI / fsck_com_article.pm
1 # BEGIN BPS TAGGED BLOCK {{{
2 #
3 # COPYRIGHT:
4 #
5 # This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
6 #                                          <sales@bestpractical.com>
7 #
8 # (Except where explicitly superseded by other copyright notices)
9 #
10 #
11 # LICENSE:
12 #
13 # This work is made available to you under the terms of Version 2 of
14 # the GNU General Public License. A copy of that license should have
15 # been provided with this software, but in any event can be snarfed
16 # from www.gnu.org.
17 #
18 # This work is distributed in the hope that it will be useful, but
19 # WITHOUT ANY WARRANTY; without even the implied warranty of
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 # General Public License for more details.
22 #
23 # You should have received a copy of the GNU General Public License
24 # along with this program; if not, write to the Free Software
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26 # 02110-1301 or visit their web page on the internet at
27 # http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28 #
29 #
30 # CONTRIBUTION SUBMISSION POLICY:
31 #
32 # (The following paragraph is not intended to limit the rights granted
33 # to you to modify and distribute this software under the terms of
34 # the GNU General Public License and is only of importance to you if
35 # you choose to contribute your changes and enhancements to the
36 # community by submitting them to Best Practical Solutions, LLC.)
37 #
38 # By intentionally submitting any modifications, corrections or
39 # derivatives to this work, or any other work intended for use with
40 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
41 # you are the copyright holder for those contributions and you grant
42 # Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
43 # royalty-free, perpetual, license to use, copy, create derivative
44 # works based on those contributions, and sublicense and distribute
45 # those contributions and any derivatives thereof.
46 #
47 # END BPS TAGGED BLOCK }}}
48
49 package RT::URI::fsck_com_article;
50
51 use strict;
52 use warnings;
53 no warnings 'redefine';
54
55 use RT::Article;
56 use base qw/RT::URI::base/;
57
58 =head2 LocalURIPrefix 
59
60 Returns the prefix for a local article URI
61
62 =cut
63
64 sub LocalURIPrefix {
65     my $self = shift;
66     my $prefix = $self->Scheme. "://". RT->Config->Get('Organization')
67         . "/article/";
68     return ($prefix);
69 }
70
71 =head2 URIForObject RT::article
72
73 Returns the RT URI for a local RT::article object
74
75 =cut
76
77 sub URIForObject {
78
79     my $self = shift;
80
81     my $obj = shift;
82     return ($self->LocalURIPrefix. $obj->Id);
83 }
84
85
86 =head2 ParseObject $ArticleObj
87
88 When handed an L<RT::Article> object, figure out its URI
89
90 =cut
91
92 =head2 ParseURI URI
93
94 When handed an fsck.com-article URI, figures out things like whether its a local article
95 and what its ID is
96
97 =cut
98
99 sub ParseURI { 
100     my $self = shift;
101     my $uri = shift;
102
103         my $article;
104  
105         if ($uri =~ /^(\d+)$/) {
106                 $article = RT::Article->new($self->CurrentUser);
107                 $article->Load($uri);   
108                 $self->{'uri'} = $article->URI;
109         }
110         else {
111             $self->{'uri'} = $uri;
112         }
113  
114        #If it's a local URI, load the article object and return its URI
115     if ( $self->IsLocal) {
116    
117         my $local_uri_prefix = $self->LocalURIPrefix;
118         if ($self->{'uri'} =~ /^$local_uri_prefix(\d+)$/) {
119                 my $id = $1;
120         
121     
122                 $article = RT::Article->new( $self->CurrentUser );
123             $article->Load($id);
124
125             #If we couldn't find a article, return undef.
126             unless ( defined $article->Id ) {
127                 return undef;
128             }
129             } else {
130             return undef;
131             }   
132     }
133  
134         $self->{'object'} = $article;
135         return ($article->Id);
136 }
137
138 =head2 IsLocal 
139
140 Returns true if this URI is for a local article.
141 Returns undef otherwise.
142
143 =cut
144
145 sub IsLocal {
146         my $self = shift;
147         my $local_uri_prefix = $self->LocalURIPrefix;
148         if ($self->{'uri'} =~ /^$local_uri_prefix/) {
149                 return 1;
150     }
151         else {
152                 return undef;
153         }
154 }
155
156
157
158 =head2 Object
159
160 Returns the object for this URI, if it's local. Otherwise returns undef.
161
162 =cut
163
164 sub Object {
165     my $self = shift;
166     return ($self->{'object'});
167
168 }
169
170 =head2 Scheme
171
172 Return the URI scheme for RT articles
173
174 =cut
175
176 sub Scheme {
177     my $self = shift;
178         return "fsck.com-article";
179 }
180
181 =head2 HREF
182
183 If this is a local article, return an HTTP url to it.
184 Otherwise, return its URI
185
186 =cut
187
188 sub HREF {
189     my $self = shift;
190     if ($self->IsLocal && $self->Object) {
191         return ( RT->Config->Get('WebURL') . "Articles/Article/Display.html?id=".$self->Object->Id);
192     }   
193     else {
194         return ($self->URI);
195     }
196 }
197
198 =head2 AsString
199
200 Return "Article 23"
201
202 =cut
203
204 sub AsString {
205     my $self = shift;
206     if ($self->IsLocal && $self->Object) {
207     return $self->loc('Article [_1]', $self->Object->id);
208
209     } else {
210         return $self->SUPER::AsString(@_);
211     }
212
213 }
214
215
216 1;