urgent multi-draft fixes from amalfi
[stet:stet.git] / rtNoAuth / readsay-old.html
1 %# Copyright (C) 2005, 2006   Software Freedom Law Center, Inc.
2 %# Author: Orion Montoya <orion@mdcclv.com>
3 %#
4 %# This software gives you freedom; it is licensed to you under version
5 %# 3 of the GNU Affero General Public License, along with the
6 %# additional permission in the following paragraph.
7 %#
8 %# This notice constitutes a grant of such permission as is necessary
9 %# to combine or link this software, or a modified version of it, with
10 %# Request Tracker (RT), published by Jesse Vincent and Best Practical
11 %# Solutions, LLC, or a derivative work of RT, and to copy, modify, and
12 %# distribute the resulting work.  RT is licensed under version 2 of
13 %# the GNU General Public License.
14 %# 
15 %# This software is distributed WITHOUT ANY WARRANTY, without even the
16 %# implied warranties of MERCHANTABILITY and FITNESS FOR A PARTICULAR
17 %# PURPOSE.  See the GNU Affero General Public License for further
18 %# details.
19 %#  
20 %# You should have received a copy of the GNU Affero General Public
21 %# License, version 3, and the GNU General Public License, version 2,
22 %# along with this software.  If not, see <http://www.gnu.org/licenses/>.
23 %#  
24 % sub displayTicket($$$);
25 %
26 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
27 <html>
28 <head>
29 <title>read GPLv3 comments: <% humanQuery($ARGS{'Query'}) || $ARGS{'id'} %></title>
30 <link rel="stylesheet" type="text/css" href="/comments/stet.css" />
31 </head>
32 <body>
33 <div id="topbar" class="topbar">
34 <span id="statustext" class="statustext">
35 % if ($Tickets) {
36 Showing comments <% humanQuery($ARGS{'Query'}) |n %> <a class="rsslink" href="<% $rsslink %>">[rss]</a> <a href="/comments/<% stripCrap($Tickets->First->FirstCustomFieldValue('NoteUrl')) %>?Query=<% $ARGS{'Query'} %>">[see on license]</a> <br/> 
37 ( found <% $Tickets->CountAll()%>, showing newest <% $StartAt %>-<% (($StartAt + $Rows) > $Tickets->CountAll()) ? $Tickets->CountAll() : ($StartAt + $Rows - 1) %>:
38 %   if ($Tickets->CountAll() > $Rows) {
39 %       if ($StartAt > 1 ) {
40       <a href="/comments/rt/readsay.html?Query=<% $ARGS{'Query'} |n %>&amp;Rows=<%$Rows%>&amp;StartAt=<% (($StartAt - $Rows) < 0) ? 1 : ($StartAt - $Rows) |n%>">prev <% $Rows %></a>
41 %       }
42 %   if (($Tickets->CountAll() > $Rows) && ($Tickets->CountAll() < $StartAt + $Rows)) {
43 |
44 %   }
45 %   if ($Tickets->CountAll() > $StartAt + $Rows) {
46          <a href="/comments/rt/readsay.html?Query=<% $ARGS{'Query'} |n %>&amp;Rows=<%$Rows%>&amp;StartAt=<% $StartAt + $Rows %>">next <% $Rows %></a>
47 %   }
48 %}
49 )
50 <a href="/comments/rt/changeshown.html?came_from=rt/readsay.html">search</a> 
51 <%perl> 
52     $Tickets->GotoFirstItem;
53     if ($StartAt > 1) {
54         for (my $i = 0; $i < $StartAt; $i++) {
55             $Tickets->Next;
56         }
57     }
58 </%perl>
59 % } elsif ($Ticket) {
60 Showing comment <a href="/comments/rt/readsay.html?id=<% $ARGS{'id'} %>"><% $ARGS{'id'} %></a> <a class="rsslink" href="<% $rsslink %>">[rss]</a> <a href="/comments/<% stripCrap($Ticket->FirstCustomFieldValue('NoteUrl')) %>?id=<% $ARGS{'id'} %>#<% $ARGS{'id'} %>">[see on license]</a> <a href="/comments/rt/changeshown.html?came_from=<% stripCrap($Ticket->FirstCustomFieldValue('NoteUrl')) %>">search</a>
61 % }
62 % if ($name) {
63 </span><span id="login" class="login">you are <% $name %>: <a href="http://gplv3.fsf.org/logout">logout</a></span></div>
64 % } else {
65 </span><span id="login" class="login">you could <a href="http://gplv3.fsf.org/login_form?came_from=/comments/rt/readsay.html?<% $Tickets ? 'Query='.$ARGS{'Query'} : 'id='.$ARGS{'id'} %>">login</a></span></div>
66 % }
67 <& header.html, name => $name &>
68 <div id="readsaymain">
69 <span id="listactions">
70 <& Elements/ListActions, actions => \@results &>
71 </span>
72 %
73 % while (my $item = $Tickets ? $Tickets->Next : $Ticket) {
74 % my $showactions = $Tickets ? 0 : 1;
75 <% displayTicket(\$item,$showactions,0) %>
76 % $Ticket = '';
77 % $rc++;
78 % if ($rc == (($StartAt + $Rows) - 1)) {
79 %    $Tickets = '';
80 % } 
81 % }
82 <!-- <div id="bottombar"><a href="stet-latest.tar.gz">get the latest source code for this comment system</a></div> -->
83 %
84 % sub displayTicket($$$) {
85 % my $itemref = shift;
86 % my $item = $$itemref;
87 % my $showactions = shift;
88 % my $deletelink = shift;
89 % if (!$deletelink) {
90 %  if ($resp == 1) {
91     <form action="readsay.html" method="POST" name="TicketUpdate" enctype="multipart/form-data">
92        <input type="hidden" name="id" value="<% $item->id %>">
93 %  }
94 % }
95
96 % if ($item->QueueObj->CurrentUserHasRight('SeeQueue')) {
97  <div class="onecomment<% ($item->QueueObj->Name =~ /Drafter/) && " Drafter" %>">
98   <h4><% ($item->QueueObj->Name =~ /Drafter/) && " Drafter's " %><% thingType(\$item) %> <a href="readsay.html?id=<% $item->id %>"><% $item->id %>: <% $item->Subject %></a>
99 %      if (($HasIssueRights) && ($showactions) && ($deletelink)) {
100             <span class="TktInput">[dissociate: <INPUT TYPE=CHECKBOX NAME="<% $deletelink %>" value="1">]</span>
101 %      }
102 </h4>
103 % if (!$deletelink) {
104 %   while (my $link = $item->MemberOf->Next) {
105     <span class="formHelpIsh">This <% thingType(\$item) %> is part of the discussion  on:<br/> #<& Elements/ShowLink, URI => $link->TargetURI, StetId => $link->id  &></span><span class="TktInput">
106 %
107 %      if ($HasIssueRights == 1) {
108            <span class="TktInput">[dissociate from parent: <INPUT TYPE=CHECKBOX NAME="DeleteLink--<% $link->Type %>-<% $link->Target %>" value="1">]</span>
109 %      }
110        <br/>
111 % }
112
113 %   }
114 <br/>
115   <span class="formHelpIsh">Regarding the text:</span> <span class="ontextText"><q><% $scrubber->scrub($item->FirstCustomFieldValue('NoteSelection')) %></q></span><br/>
116     <span class="formHelpIsh">In section: <span class="nodeLink"><a href="/comments/rt/readsay.html?Query=%20'CF.NoteStartNodeId'%20LIKE%20'<% $scrubber->scrub($item->FirstCustomFieldValue('NoteStartNodeId')) %>'%20AND%20'CF.NoteUrl'%20LIKE%20'<%stripCrap($item->FirstCustomFieldValue('NoteUrl'))%>'%20"><% $scrubber->scrub($item->FirstCustomFieldValue('NoteStartNodeId')) %></a></span></span><br/>
117 %#    In section: <span class="nodeLink"><a href="/comments/<%stripCrap($item->FirstCustomFieldValue('NoteUrl'))%>?Query=%20'CF.NoteStartNodeId'%20LIKE%20'<% $scrubber->scrub($item->FirstCustomFieldValue('NoteStartNodeId')) %>'%20AND%20'CF.NoteUrl'%20LIKE%20'<%stripCrap($item->FirstCustomFieldValue('NoteUrl'))%>'%20"><% $scrubber->scrub($item->FirstCustomFieldValue('NoteStartNodeId')) %></a></span><br/>
118   <span class="formHelpIsh">Submitted by: <% userlink(\$item, \$item) |n%> <span class="date">on <% doDate(\$item) %></span></span><br/>
119 %# my ($agrees,$agr_count) = showAgree(\$item);
120 %# print STDERR "agree is $agree\n";
121 %#  <% $agree |n %><br/>
122 %#  <span class="agreecount"><% $agr_count %> agree</span></span><br/>
123 %#  comments:<br/> 
124 <br/>
125 <% getThread(\$item) |n %>
126
127 %   if ($item->Members->GotoFirstItem) {
128         <em>this <% thingType(\$item) %> does not have any children </em><br/>
129 %   }
130 <br/>
131 %   while (my $link = $item->Members->Next) {
132     <span class="TktLabel">Child comment of <% $item->id %>:</span>
133 %    my $child = RT::Ticket->new($CurrentUser);
134 %    $child->Load($link->BaseURI->Object->id);
135 % my $deletelink = "DeleteLink-". $link->Base ."-". $link->Type."-";
136 <% displayTicket(\$child,$showactions,$deletelink) %>
137 %   }
138 <br/>
139 %  if (($HasIssueRights) && ($showactions) && (!$deletelink)) {
140 <br/>
141   <span class="TktLabel">Children:</span><br/>
142         <span class="TktInput indent">add new: <INPUT NAME="MemberOf-<% $item->id %>"> <span class="inputcaption">[comment id numbers, space separated]</span></span>
143 %  }
144 % if (($showactions) & (!$deletelink)){
145 <br/>
146 %  if ($HasIssueRights) {
147     <span class="TktLabel">Parents:</span><br/>
148        <span class="TktInput indent">add new: <INPUT NAME="<% $item->id %>-MemberOf"> <span class="inputcaption">[comment id numbers, space separated]</span></span>
149 %  }
150     <br/>
151     <span class="TktLabel">Links:</span>
152 %   if ($item->RefersTo->GotoFirstItem) {
153         <em>this <% thingType(\$item) %> does not link to any external resources</em>
154 %   }
155  <br/>
156 %   while (my $link = $item->RefersTo->Next) {
157         <A HREF="<% $link->Target %>"><% $link->Target %></A>
158 %       if ($HasIssueRights) {
159             <span class="TktInput">[delete: <INPUT TYPE=CHECKBOX NAME="DeleteLink--<% $link->Base %>-<% $link->Type %>" value="1">]</span>
160 %           }
161  <br/>
162 %   }
163 %
164 %  if ($HasIssueRights) {
165         <span class="TktInput indent">link to external item(s): <INPUT NAME="<% $item->id %>-RefersTo"> <span class="inputcaption">[URIs with protocol://, space separated]</span></span><br/>
166 %  }
167
168 %     my $DiscussGrpObj = RT::CustomField->new($CurrentUser);
169 %     $DiscussGrpObj->Load(8);
170 %     our $Values  = $item->CustomFieldValues($DiscussGrpObj->id);
171 %     our $GroupNames = $DiscussGrpObj->Values();
172  <br>
173     <span class="TktLabel">Current Committees:</span>
174 % while (my $Committee = $GroupNames->Next) {
175     <% $Values->HasEntry($Committee->Name) && $Committee->Name %>
176 %    }
177  <br>
178 %####  customfield picker doesn't show which groups are related
179 %  if ($HasIssueRights) {
180 %  my $groupRows = 7;
181  <span class="groupselect"><span class="TktLabel select">Change Committees:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
182  <br>
183       <input type="hidden" name="Ticket-<% $item->id %>-CustomField-<%$DiscussGrpObj->Id%>-Values-Magic" value="1">
184       <span class="TktInput indent"><select name="Ticket-<% $item->id %>-CustomField-<%$DiscussGrpObj->Id%>-Values"
185         size="<%$groupRows%>"
186         <%$DiscussGrpObj->Type eq 'SelectMultiple' && 'MULTIPLE'%>>
187 %       my $CustomFieldValues = $DiscussGrpObj->Values();
188 %       my $selected;
189 %       while (my $value = $CustomFieldValues->Next) {
190         <option value="<%$value->Name%>"
191 %       if ($item) {
192             <% $Values->HasEntry($value->Name) && ($selected = 1) && 'SELECTED' %>
193 %       } 
194             ><% $value->Name%></option>
195 %           }
196         <option value="" <% !$selected && 'SELECTED' %>><&|/l&>(no value)</&></option>
197       </select><br/></span>
198 %
199 %  if (($HasIssueRights) && ($item->Queue != $issuequeue)) {
200        <input type="checkbox" value="1" name="MakeIssue"/><span class="TktLabel"> Upgrade this to an Issue</span><br/>
201 %  }
202 %  if (($HasIssueRights) && ($item->Queue == $issuequeue)) {
203     <input type="checkbox" value="1" name="NonIssue"/><span class="TktLabel"> Downgrade this Issue to a Comment</span><br/>
204 %  }
205 % if ($item->OwnerObj->Name =~ "Nobody") {
206  <input type="checkbox" name="Take" value="Take"> <span class="TktLabel">Take personal ownership of this ticket</span><br/>
207 % }
208 % } 
209 % if ($item->OwnerObj->Name !~ "Nobody") {
210     <span class="TktLabel">This ticket is owned by</span> <% $item->OwnerObj->Name eq $name ? "<em>you</em>" : $item->OwnerObj->Name |n %>
211 %# of Committee <% $item->OwnerObj->Organization %>
212 % if (($HasIssueRights) && ($item->OwnerObj->Name != $name)) {
213             <input type="checkbox" name="Steal" value="Steal"> steal
214 % } 
215 % elsif (($HasIssueRights) && ($item->OwnerObj->Name =~ $name)) {
216         <input type="checkbox" name="Untake" value="Untake"> disown
217 % }
218 % }
219  <br>
220 %  if ($resp == 1) {
221         <input type=hidden name="UpdateType" value="public">
222         <span class="TktLabel">Add comments:</span> <br/>
223         <textarea class="messagebox" COLS=72 ROWS=15 WRAP=HARD NAME="UpdateContent" onfocus="if(this.value=='Enter additional comments here') {this.value='';}" onblur="if(this.value==''){this.value='Enter additional comments here';}"></textarea><br/>
224 %      if ($HasIssueRights) {
225              <INPUT TYPE=SUBMIT NAME="SubmitTicket" VALUE="Make changes"></form>
226 %      } else {
227            <INPUT TYPE=SUBMIT NAME="SubmitTicket" VALUE="Add comment"></form>
228 %      }
229 %  } # should close "if $resp == 1" after picker
230 % }
231  </div>
232 % }
233 % else {
234 <div class="onecomment formHelpIsh">You do not have permission to view comment number <% $item->id %><br/> <br/></div>
235
236 % }
237 % return '';
238 % }
239 </body>
240 </html>
241 <%INIT>
242 use CGI qw/:standard/;
243 use HTML::Scrubber;
244 our $scrubber = HTML::Scrubber->new( allow => [ qw[ a b i u br ] ] );
245 require "/var/www/stet/stetsubs.pl";
246 our $issuequeue = 5; 
247 my $rc = 0;
248 our ($name, $resp, $CurrentUser, $HasIssueRights);
249 my ($pass, $agr_vals, $thing);
250 ($CurrentUser, $resp, $name) = getUser("foo");
251 $CurrentUser = $session{'CurrentUser'};
252
253 my $rsslink = "/comments/rt/rssresults.rdf?id=".$ARGS{'id'}."&Query=".$ARGS{'Query'};
254
255 my ($Tickets, $Ticket, @results, @msgresults, @linkresults, @cfresults);
256
257
258 if ($ARGS{'Query'}) {
259     $Tickets = RT::Tickets->new($CurrentUser);
260     $Tickets->FromSQL($ARGS{'Query'});
261     $Tickets->OrderBy( FIELD => 'id', ORDER => $ARGS{'Order'});
262 }
263 elsif ($ARGS{'id'}) {
264     $Ticket = RT::Ticket->new($CurrentUser);
265     $Ticket = LoadTicket($ARGS{'id'});
266     if ($ARGS{'SubmitTicket'}) {
267         ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef=>\%ARGS, Actions=>\@msgresults);
268         @linkresults = ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS);
269         @cfresults = ProcessTicketCustomFieldUpdates(TicketObj => $Ticket, ARGSRef => \%ARGS);
270         $ARGS{'Take'} && ($Ticket->Take()); # && print STDERR $CurrentUser->Name." taking ticket ".$Ticket->id."\n");
271         $ARGS{'Steal'} && ($Ticket->Steal()); # && print STDERR $CurrentUser->Name." stealing ticket ".$Ticket->id."\n");
272         $ARGS{'Untake'} && ($Ticket->Untake()); # && print STDERR $CurrentUser->Name." untaking ticket ".$Ticket->id."\n");
273    }
274     if ($ARGS{'MakeIssue'}) {
275         $Ticket->SetQueue($issuequeue);
276     }
277     if ($ARGS{'NonIssue'}) {
278         $Ticket->SetQueue('Inbox');
279     }
280
281     foreach my $result (@msgresults,@linkresults,@cfresults) {
282         push @results,$result;
283     }
284 }
285
286 my $NewQueueObj = RT::Queue->new( $CurrentUser );
287 $NewQueueObj->Load($issuequeue); 
288
289 if (
290     (
291         $CurrentUser->HasRight(
292             Right    => 'CreateTicket',
293             Object => $NewQueueObj
294         )
295       )
296 )
297     {
298         $HasIssueRights = 1;
299     }
300 else {$HasIssueRights = '';}
301
302 sub thingType($) {
303     my $itemref = shift;
304     my $item = $$itemref;
305 if ($item->Queue == 5) {
306     return "Issue";
307 }
308 else {
309     return "Comment";
310 }
311 }
312
313
314
315 sub getThread($) {
316
317     my $itemref = shift;
318     my $item = $$itemref;
319     my $Transactions = $item->Transactions;
320     my $allcomments = '';
321     my $scrubber = HTML::Scrubber->new( allow => [ qw[ a b i u br ] ] );
322     while (my $Transaction = $Transactions->Next) {
323         
324         if ($Transaction->Type =~ /^(Create|Correspond|Comment$)/) {
325             
326             my $attachments = $Transaction->Attachments;
327 #    my $CustomFields = $item->QueueObj->TicketCustomFields();
328             my $CustomFields = $item->QueueObj->CustomFields();
329             $attachments->GotoFirstItem;
330             while (my $message = $attachments->Next) {
331 #                        $allcomments .= $Transaction->Content;
332                 my ($subj, $cont) = ('');
333                 if ($message->Subject != '') {
334                     $subj = $scrubber->scrub($message->Subject);
335                 }
336                 #$cont = sprintf("%s",$message->Content);
337                 #        if ($message->Content != '') {
338                 $cont = $scrubber->scrub($message->Content);
339                 if ($cont =~ s/(\S)\n\n(\S)/$1<\/p><p>\n$2/gs) {
340                 $cont = "<p>$cont</p>";
341             }
342                 $cont =~ s/&(?!amp;)/&amp;/g;
343                 #        }
344 #                        if ($cont = $message->Content) {
345 #                            $cont = $scrubber->scrub($cont);
346 #                        }
347                 
348                 $allcomments .= "<span class=\"formHelpIsh\">Comment noted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n";          
349                 $allcomments .= "<blockquote><h4>$subj</h4>\n".$cont."</blockquote>\n";
350
351 #           $allcomments .= "</blockquote>";
352             }
353         }
354             else {
355                 unless (($Transaction->CreatorObj->Name =~ "RT_System") || ($Transaction->BriefDescription =~ "NoteText|NoteSelection|NodeId|Agreeer")) {
356                
357                     $allcomments .= "<div class=\"formHelpIsh\">".$Transaction->BriefDescription." by ".userlink(\$item,\$Transaction)." <span class=\"date\">on ".doDate(\$Transaction)."</span></div>\n";
358                 }
359             }
360
361         }
362       
363             return $allcomments;
364         
365     }
366
367 sub userlink($$) {
368     my $itemref = shift;
369     my $item = $$itemref;
370     my $msgref = shift;
371     my $message = $$msgref;
372     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>";
373 }
374
375 sub doDate($) {
376     my $itemref = shift;
377     my $item = $$itemref;
378     $item->Created =~ m/(\d\d\d\d-\d\d-\d\d) (\d\d:\d\d):\d\d/;
379     return  "$1 at $2 ". getTZ($item->Created);
380 }
381
382 sub getTZ($) {
383 my $date = shift;
384 $date =~ s/\d\d\d\d-(\d\d)-\d\d.*/$1/;
385 my $eastern = "EST";
386 if ($date > 3) {  # after the end of March...
387     $eastern = "EDT";
388 }
389 if ($date > 10) {  # after the end of October...
390     $eastern = "EST";
391 }
392
393 return $eastern;
394 }
395
396 </%INIT>
397 <%ARGS>
398 $Rows => 30
399 $StartAt => 1
400 $Order => 'DESC'
401 $Query => "'CF.NoteUrl' LIKE 'gplv3-draft-1'"
402 $Take => undef
403 $Steal => undef
404 $Untake => undef
405 </%ARGS>