urgent multi-draft fixes from amalfi
[stet:stet.git] / rtNoAuth / rsswithcomments.rdf
1 %# BEGIN BPS TAGGED BLOCK {{{
2 %# 
3 %# Copyright (c) 2005, 2006 Software Freedom Law Center
4 %# Author: Orion Montoya <orion@mdcclv.com>
5 %#
6 %# This software gives you freedom; it is licensed to you under version
7 %# 3 of the GNU Affero General Public License, along with the
8 %# additional permission in the following paragraph.
9 %#
10 %# This notice constitutes a grant of such permission as is necessary
11 %# to combine or link this software, or a modified version of it, with
12 %# Request Tracker (RT), published by Jesse Vincent and Best Practical
13 %# Solutions, LLC, or a derivative work of RT, and to copy, modify, and
14 %# distribute the resulting work.  RT is licensed under version 2 of
15 %# the GNU General Public License.
16 %# 
17 %# This software is distributed WITHOUT ANY WARRANTY, without even the
18 %# implied warranties of MERCHANTABILITY and FITNESS FOR A PARTICULAR
19 %# PURPOSE.  See the GNU Affero General Public License for further
20 %# details.
21 %#  
22 %# You should have received a copy of the GNU Affero General Public
23 %# License, version 3, and the GNU General Public License, version 2,
24 %# along with this software.  If not, see <http://www.gnu.org/licenses/>.
25 %# 
26 %# COPYRIGHT:
27 %#  
28 %# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
29 %#                                          <jesse@bestpractical.com>
30 %# 
31 %# (Except where explicitly superseded by other copyright notices)
32 %# 
33 %# 
34 %# LICENSE:
35 %# 
36 %# This work is made available to you under the terms of Version 2 of
37 %# the GNU General Public License. A copy of that license should have
38 %# been provided with this software, but in any event can be snarfed
39 %# from www.gnu.org.
40 %# 
41 %# This work is distributed in the hope that it will be useful, but
42 %# WITHOUT ANY WARRANTY; without even the implied warranty of
43 %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
44 %# General Public License for more details.
45 %# 
46 %# You should have received a copy of the GNU General Public License
47 %# along with this program; if not, write to the Free Software
48 %# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
49 %# 
50 %# 
51 %# CONTRIBUTION SUBMISSION POLICY:
52 %# 
53 %# (The following paragraph is not intended to limit the rights granted
54 %# to you to modify and distribute this software under the terms of
55 %# the GNU General Public License and is only of importance to you if
56 %# you choose to contribute your changes and enhancements to the
57 %# community by submitting them to Best Practical Solutions, LLC.)
58 %# 
59 %# By intentionally submitting any modifications, corrections or
60 %# derivatives to this work, or any other work intended for use with
61 %# Request Tracker, to Best Practical Solutions, LLC, you confirm that
62 %# you are the copyright holder for those contributions and you grant
63 %# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
64 %# royalty-free, perpetual, license to use, copy, create derivative
65 %# works based on those contributions, and sublicense and distribute
66 %# those contributions and any derivatives thereof.
67 %# 
68 %# END BPS TAGGED BLOCK }}}
69 <%INIT>
70 use CGI;
71 use Date::Parse;
72 use Date::Format;
73 require "/var/www/stet/stetsubs.pl";
74 my $Tickets = RT::Tickets->new($session{'CurrentUser'});
75 $Tickets->FromSQL($ARGS{'Query'});
76 $Tickets->OrderBy( FIELD => 'LastUpdated', ORDER => "DESC");
77 $r->content_type('application/rdf+xml');
78
79
80
81         # create an RSS 1.0 file (http://purl.org/rss/1.0/)
82         use XML::RSS;
83         my $rss = new XML::RSS (version => '1.0');
84         $rss->channel(
85           title        => "$Rows newest GPLv3 Comments & Discussion: " . humanQuery($ARGS{'Query'}),
86           link         => "http://gplv3.fsf.org/comments/?Query=". $ARGS{'QUERY'},
87           description  => "This is a feed of the $Rows most recent comments on the draft license, generated by the query \"" . humanQuery($ARGS{'Query'}) . "\"",
88           dc => {
89           },
90           syn => {
91             updatePeriod     => "hourly",
92             updateFrequency  => "1",
93             updateBase       => "1901-01-01T00:00+00:00",
94           },
95         );
96
97         my $i = 0;
98
99     while (( my $Ticket = $Tickets->Next()) && ($i < $Rows)) {
100        my $row;
101        my $subjtext = cleanNoteSel(\$Ticket);
102        my $para = $Ticket->FirstCustomFieldValue('NoteStartNodeId');
103        my $description = "Regarding: <em>$subjtext</em><br/>In: $para<br/>".getThread(\$Ticket);
104        my $isodate = str2time($Ticket->Created);
105 #       my $showdate = time2str("%a, %d %b %Y %H:%M:%S -0500", $isodate);
106        my $showdate = time2str("%Y-%m-%dT%H:%M:%S-05:00", $isodate);
107 #                              2002-10-02T10:00:00-05:00
108 #                              2006-29-01T23:24:42-05:00
109         $rss->add_item(
110           title       =>  $Ticket->Subject,
111           link        => "http://gplv3.fsf.org/comments/rt/readsay.html?id=".$Ticket->id,
112           description =>  $description,
113           dc => {
114             subject  => $Ticket->Subject,
115             creator  => $Ticket->CreatorObj->RealName,
116             date => $showdate,
117           },
118         );
119         $i++;
120     }
121 $m->out($rss->as_string);
122 $m->abort();
123
124 sub getThread($) {
125
126     my $itemref = shift;
127     my $item = $$itemref;
128     my $Transactions = $item->Transactions;
129     my $allcomments = '';
130     my $scrubber = HTML::Scrubber->new( allow => [ qw[ a b i u br ] ] );
131     while (my $Transaction = $Transactions->Next) {
132         
133         if ($Transaction->Type =~ /^(Create|Correspond|Comment$)/) {
134             
135             my $attachments = $Transaction->Attachments;
136 #    my $CustomFields = $item->QueueObj->TicketCustomFields();
137             my $CustomFields = $item->QueueObj->CustomFields();
138             $attachments->GotoFirstItem;
139             while (my $message = $attachments->Next) {
140 #                        $allcomments .= $Transaction->Content;
141                 my ($subj, $cont) = ('');
142                 if ($message->Subject != '') {
143                     $subj = $scrubber->scrub($message->Subject);
144                 }
145                 #$cont = sprintf("%s",$message->Content);
146                 #        if ($message->Content != '') {
147                 $cont = $scrubber->scrub($message->Content);
148                 if ($cont =~ s/(\S)\n\n(\S)/$1<\/p><p>\n$2/gs) {
149                 $cont = "<p>$cont</p>";
150             }
151                 $cont =~ s/&(?!amp;)/&amp;/g;
152                 #        }
153 #                        if ($cont = $message->Content) {
154 #                            $cont = $scrubber->scrub($cont);
155 #                        }
156                 
157                 $allcomments .= "<span class=\"formHelpIsh\">Comment noted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n";          
158                 $allcomments .= "<blockquote><h4>$subj</h4>\n".$cont."</blockquote>\n";
159
160 #           $allcomments .= "</blockquote>";
161             }
162         }
163             else {
164                 unless (($Transaction->CreatorObj->Name =~ "RT_System") || ($Transaction->BriefDescription =~ "NoteText|NoteSelection|NodeId|Agreeer")) {
165                
166                     $allcomments .= "<div class=\"formHelpIsh\">".$Transaction->BriefDescription." by ".userlink(\$item,\$Transaction)." <span class=\"date\">on ".doDate(\$Transaction)."</span></div>\n";
167                 }
168             }
169
170         }
171       
172             return $allcomments;
173         
174     }
175 sub userlink($$) {
176     my $itemref = shift;
177     my $item = $$itemref;
178     my $msgref = shift;
179     my $message = $$msgref;
180     return "<span class=\"userlink\"><a href=\"/comments/".$item->FirstCustomFieldValue('NoteUrl')."?Query=%20Requestor.Name%20LIKE%20'".$message->CreatorObj->Name."'%20AND%20'CF.NoteUrl'%20LIKE%20'".$item->FirstCustomFieldValue('NoteUrl')."'%20\">".$message->CreatorObj->Name."</a>". longOrg($message->CreatorObj)."</span>";
181 }
182
183 </%INIT>
184 <%ARGS>
185 $Rows => 50
186 </%ARGS>