Changeset 69
- Timestamp:
- 07/28/06 12:51:10 (2 years ago)
- Files:
-
- trunk/doc-markup-samples/gplv3-draft-1.html (modified) (3 diffs)
- trunk/idlist.txt (added)
- trunk/rtNoAuth/changeshown-complete.html (modified) (3 diffs)
- trunk/rtNoAuth/changeshown.html (modified) (5 diffs)
- trunk/rtNoAuth/formxml.pl (added)
- trunk/rtNoAuth/formxml2.html (modified) (2 diffs)
- trunk/rtNoAuth/getannotations-devel.html (modified) (2 diffs)
- trunk/rtNoAuth/getannotations.html (modified) (2 diffs)
- trunk/rtNoAuth/notificationstuff.html (added)
- trunk/rtNoAuth/readsay-ancestry.html (modified) (19 diffs)
- trunk/rtNoAuth/readsay-devel.html (modified) (19 diffs)
- trunk/rtNoAuth/readsay-old.html (modified) (2 diffs)
- trunk/rtNoAuth/readsay.html (modified) (23 diffs)
- trunk/rtNoAuth/resolve.html (added)
- trunk/rtNoAuth/rsswithcomments.rdf (modified) (5 diffs)
- trunk/rtNoAuth/sectid.html (added)
- trunk/rtNoAuth/submitcomment-cachetoo.html (modified) (3 diffs)
- trunk/rtNoAuth/submitcomment-devel.html (modified) (6 diffs)
- trunk/rtNoAuth/submitcomment.html (modified) (1 diff)
- trunk/rtNoAuth/summarydecision.html (added)
- trunk/rtNoAuth/tweakcustom.html (added)
- trunk/rtNoAuth/userprefs.html (added)
- trunk/rtNoAuth/writeresolves.html (added)
- trunk/rtNoAuth/xmlresults-compat.html (modified) (3 diffs)
- trunk/rtNoAuth/xmlresults-devel.html (modified) (4 diffs)
- trunk/rtNoAuth/xmlresults-intense.html (modified) (4 diffs)
- trunk/rtNoAuth/xmlresults.html (modified) (2 diffs)
- trunk/selectxpath.xsl (modified) (7 diffs)
- trunk/stet-ie.css (modified) (5 diffs)
- trunk/stet-intense-shorter.js (modified) (23 diffs)
- trunk/stetsubs.pl (modified) (3 diffs)
- trunk/topids.txt (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/doc-markup-samples/gplv3-draft-1.html
r54 r69 38 38 <ul id="portal-personaltools"><li> </li></ul> 39 39 <div id="maintext"> 40 <div class="selfdoc"><p>Click on highlighted phrases to see the comments that have been made about them.<br/> 41 Phrases that are subject to more comments are highlighted more intensely: 42 <tt><span style="font-size: large; font-weight: bold"><span class="a1">f</span><span class="a2">e</span><span class="a3">w</span><span class="a4"> </span><span class="a5">c</span><span class="a6">o</span><span class="a7">m</span><span class="a8">m</span><span class="a9">e</span><span class="a10">n</span><span class="a11">t</span><span class="a12">s</span><span class="a13"> man</span><span class="a14">y</span><span class="a15"> </span><span class="a16">c</span><span class="a17">o</span><span class="a18">m</span><span class="a19">m</span><span class="a20">e</span><span class="a21">n</span><span class="a22">t</span><span class="a23">s</span><span class="a24"> </span></span></tt></p> 43 44 <p><a href="#" onmousedown="javascript:XpathSel()">select some text and then type "c" to submit comments.</a><br/> 45 <a href="http://gplv3.fsf.org/wiki/index.php/Comment_system">more documentation</a></p> 46 47 </div> 40 48 <div id="title"><p id="title.0"><span class="h1" id="title.0.0">GNU GENERAL PUBLIC LICENSE</span></p> 41 49 <p id="title.1"><span id="title.1.0">Discussion Draft 1 of Version 3, 16 Jan 2006</span></p> … … 43 51 <p id="copyright.0"><span id="copyright.0.0">Copyright (C) 2006 Free Software Foundation, Inc.<br/>51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.<br/>Everyone is permitted to copy and distribute verbatim copies 44 52 of this license document, but changing it is not allowed.</span></p></div> 45 <p>Click on highlighted phrases to see the comments that have been made about them.<br/>46 Phrases that are subject to more comments are highlighted more intensely:47 <tt><span style="font-size: large; font-weight: bold"><span class="a1">f</span><span class="a2">e</span><span class="a3">w</span><span class="a4"> </span><span class="a5">c</span><span class="a6">o</span><span class="a7">m</span><span class="a8">m</span><span class="a9">e</span><span class="a10">n</span><span class="a11">t</span><span class="a12">s</span><span class="a13"> man</span><span class="a14">y</span><span class="a15"> </span><span class="a16">c</span><span class="a17">o</span><span class="a18">m</span><span class="a19">m</span><span class="a20">e</span><span class="a21">n</span><span class="a22">t</span><span class="a23">s</span><span class="a24"> </span></span></tt></p>48 49 <p><a href="#" onmousedown="javascript:XpathSel()">select some text and then type "c" to submit comments.</a></p>50 53 <div id="gpl3.preamble"><p class="sectTitle" id="gpl3.preamble.0"><span id="gpl3.preamble.0.0">Preamble</span></p> 51 54 <p class="sectTitle sub" id="gpl3.preamble.0.0.0"><span id="gpl3.preamble.0.0.0.0"></span></p> … … 485 488 Please report problems with this commenting system to <a href="mailto:stet@gplv3.fsf.org">stet@gplv3.fsf.org</a>. 486 489 <br/> 487 <a href="http://gplv3.fsf.org/comments/source/stet-latest.tar.bz2">get the source code</a><br/>488 490 Copyright © 2006 489 491 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, trunk/rtNoAuth/changeshown-complete.html
r68 r69 45 45 % if (!$ARGS{'came_from'}) { 46 46 % $qs = $ENV{'HTTP_REFERER'}; 47 % $qs =~ s/(.*)\?.*/$1/;48 % $qs =~ s/.*\/(.*)/$1/;49 47 % } else { 50 48 % $qs = $ARGS{'came_from'}; 51 49 % } 50 % $qs =~ s/(.*)\?.*/$1/; 51 % $qs =~ s/.*\/(.*)/$1/; 52 52 % $qs =~ s/(.html|.xml)$//; 53 % $came_from = $qs; 53 54 <h3 class="searchheader">Search for comments on <% $qs %></h3> 54 55 <input type=hidden name="came_from" value="<% $came_from %>"> … … 205 206 206 207 <tr><td class=label align="right"> 207 Section id208 Section 208 209 </td> 209 210 <td> 210 211 <SELECT NAME ="'CF.NoteStartNodeId'Op"> 211 212 <OPTION VALUE="LIKE" 212 > contains</OPTION>213 >is</OPTION> 213 214 <OPTION VALUE="NOT LIKE" 214 215 >doesn't contain</OPTION> 215 < OPTION VALUE="="216 <!-- <OPTION VALUE="=" 216 217 >is</OPTION> 217 218 <OPTION VALUE="!=" … … 220 221 >less than</OPTION> 221 222 <OPTION VALUE=">" 222 >greater than</OPTION> 223 >greater than</OPTION> --> 223 224 </SELECT> 224 225 </td> 225 226 <td> 226 <input name="ValueOf'CF.NoteStartNodeId'" size="20"> 227 </td></tr> 227 <!-- <input name="ValueOf'CF.NoteStartNodeId'" size="20"> --> 228 <select name="ValueOf'CF.NoteStartNodeId'" id="simplepicker"> 229 <option selected value="">-</option> 230 <option value="gpl3.preamble">Preamble</option> 231 <option value="gpl3.definitions">0. Definitions</option> 232 <option value="gpl3.sourcecode">1. Source Code</option> 233 <option value="basicperms">2. Basic Permissions</option> 234 <option value="gpl3.drm">3. Digital Restrictions Management</option> 235 <option value="verbatimcopying">4. Verbatim Copying</option> 236 <option value="distribmod">5. Distributing Modified Source Versions</option> 237 <option value="nonsource">6. Non-Source Distribution</option> 238 <option value="licensecompat">7. License Compatibility</option> 239 <option value="termination">8. Termination</option> 240 <option value="notacontract">9. Not A Contract</option> 241 <option value="autolicense">10. Automatic Licensing of Downstream Users</option> 242 <option value="licensingpatents">11. Licensing of Patents</option> 243 <option value="gpl3.libertyordeath">12. Liberty or Death for the Program</option> 244 <option value="geolimits">[13. Geographical Limitations]</option> 245 <option value="revisedversions">14. Revised Versions of this License</option> 246 <option value="requestingexceptions">15. Requesting Exceptions</option> 247 <option value="nowarranty0">16. NO WARRANTY</option> 248 <option value="nowarranty1">17. NO WARRANTY (cont.)</option> 249 <option value="nottested">18. [not tested for safety-critical]</option> 250 <option value="howtoapply">How to Apply These Terms to Your New Programs</option> 251 </select> <a href="javascript:sectId('suggest')">autocomplete</a></td></tr> 228 252 229 253 <tr><td class=label align="right"> trunk/rtNoAuth/changeshown.html
r44 r69 45 45 % if (!$ARGS{'came_from'}) { 46 46 % $qs = $ENV{'HTTP_REFERER'}; 47 % $qs =~ s/(.*)\?.*/$1/;48 % $qs =~ s/.*\/(.*)/$1/;49 47 % } else { 50 48 % $qs = $ARGS{'came_from'}; 51 49 % } 50 % $qs =~ s/(.*)\?.*/$1/; 51 % $qs =~ s/.*\/(.*)/$1/; 52 52 % $qs =~ s/(.html|.xml)$//; 53 %# $came_from = $qs; 53 54 <h3 class="searchheader">Search for comments on <% $qs %></h3> 54 55 <input type=hidden name="came_from" value="<% $came_from %>"> … … 205 206 206 207 <tr><td class=label align="right"> 207 Section id208 Section 208 209 </td> 209 210 <td> 210 211 <SELECT NAME ="'CF.NoteStartNodeId'Op"> 211 212 <OPTION VALUE="LIKE" 212 > contains</OPTION>213 >is</OPTION> 213 214 <OPTION VALUE="NOT LIKE" 214 215 >doesn't contain</OPTION> 215 < OPTION VALUE="="216 <!-- <OPTION VALUE="=" 216 217 >is</OPTION> 217 218 <OPTION VALUE="!=" … … 220 221 >less than</OPTION> 221 222 <OPTION VALUE=">" 222 >greater than</OPTION> 223 >greater than</OPTION> --> 223 224 </SELECT> 224 225 </td> 225 226 <td> 226 <input name="ValueOf'CF.NoteStartNodeId'" size="20"> 227 </td></tr> 227 <!-- <input name="ValueOf'CF.NoteStartNodeId'" size="20"> --> 228 <select name="ValueOf'CF.NoteStartNodeId'"> 229 <option selected value="">-</option> 230 <option value="gpl3.preamble">Preamble</option> 231 <option value="gpl3.definitions">0. Definitions</option> 232 <option value="gpl3.sourcecode">1. Source Code</option> 233 <option value="basicperms">2. Basic Permissions</option> 234 <option value="gpl3.drm">3. Digital Restrictions Management</option> 235 <option value="verbatimcopying">4. Verbatim Copying</option> 236 <option value="distribmod">5. Distributing Modified Source Versions</option> 237 <option value="nonsource">6. Non-Source Distribution</option> 238 <option value="licensecompat">7. License Compatibility</option> 239 <option value="termination">8. Termination</option> 240 <option value="notacontract">9. Not A Contract</option> 241 <option value="autolicense">10. Automatic Licensing of Downstream Users</option> 242 <option value="licensingpatents">11. Licensing of Patents</option> 243 <option value="gpl3.libertyordeath">12. Liberty or Death for the Program</option> 244 <option value="geolimits">[13. Geographical Limitations]</option> 245 <option value="revisedversions">14. Revised Versions of this License</option> 246 <option value="requestingexceptions">15. Requesting Exceptions</option> 247 <option value="nowarranty0">16. NO WARRANTY</option> 248 <option value="nowarranty1">17. NO WARRANTY (cont.)</option> 249 <option value="nottested">18. [not tested for safety-critical]</option> 250 <option value="howtoapply">How to Apply These Terms to Your New Programs</option> 251 </select></td></tr> 228 252 229 253 <tr><td class=label align="right"> … … 996 1020 # {{{ Show the results, if we were asked. 997 1021 if ( $ARGS{"DoSearch"} ) { 998 my $redirurl = " /comments/$came_from?Query=$Query&Order=$Order&OrderBy=$OrderBy&Rows=$RowsPerPage";1022 my $redirurl = "$came_from?Query=$Query&Order=$Order&OrderBy=$OrderBy&Rows=$RowsPerPage"; 999 1023 $m->redirect($redirurl); 1000 1024 $m->abort(); … … 1029 1053 $RowsPerPage => 30 1030 1054 $HideResults => 0 1031 $came_from => ' http://gplv3.fsf.org/comments/gplv3-draft-1'1055 $came_from => '/comments/rt/readsay.html' 1032 1056 $Delete => 1 1033 1057 $NewQuery => 1 trunk/rtNoAuth/formxml2.html
r63 r69 25 25 <response> 26 26 <sdp> 27 % if ($matched > 1) { 28 <nf>too many results</nf> 29 % } elsif ($dompath) { 27 % if ($dompath) { 30 28 <dp><% $dompath %></dp> 31 29 <sl><% $selection %></sl> … … 33 31 <fn>gplv3-draft-1</fn> 34 32 % } else { 35 <nf>not found : <% $selection %></nf>33 <nf>not found</nf> 36 34 % } 37 35 </sdp> 38 36 </response> 39 37 <%INIT> 40 use XML:: DOM;41 use XML::DOM;38 use XML::Twig; 39 require "/var/www/stet/stetsubs.pl"; 42 40 43 my $parser = new XML::DOM::Parser; 44 my $doc = $parser->parsefile ("/var/www/stet/gplv3-draft-1.xml"); 41 use Data::Dumper; 45 42 46 my $nodes = $doc->getElementsByTagName("sent"); 47 my $n = $nodes->getLength; 43 my $mastertext = '/var/www/stet/gplv3-draft-1.xml'; 44 open(XML,$mastertext); 45 # my $wholefile; 46 our ($dompath, $startid, $matched, $notesubj, $ticket_body, $form, $wholefile); # = 0; 47 while (<XML>) { 48 $wholefile .= $_; 49 } 48 50 49 $selection =~ s/\x00$//; 50 #print STDERR "selection is "; 51 #foreach my $char (split(//,$selection)) { 52 # printf STDERR ( "%02X ", ord($char) ); 53 #} 54 #print STDERR "\n"; 55 #$selection = "software are designed"; 56 our ($dompath, $startid, $matched, $notesubj, $ticket_body, $form, $wholefile) = 0; 57 for (my $i = 0; $i < $n; $i++) 58 { 59 my $node = $nodes->item($i); 60 my $sent = $node->toString; 61 $sent =~ s/\s+/ /g; 62 $selection =~ s/\s+/ /g; 63 if ($sent =~ m/.*$selection.*/) { 64 # print STDERR "MATCHED $sent\n"; 65 $matched++; 66 $startid = $node->getAttribute('id'); 67 $dompath = $node->getParentNode->getParentNode->getParentNode->getNodeName; 68 $dompath .= "/".$node->getParentNode->getParentNode->getNodeName; 69 $dompath .= "[id=".$node->getParentNode->getParentNode->getAttributeNode('id')->getValue."]/"; 70 $dompath .= $node->getParentNode->getNodeName; 71 $dompath .= "[id=".$node->getParentNode->getAttributeNode('id')->getValue."]/"; 72 $dompath .= $node->getNodeName."[id=".$node->getAttributeNode('id')->getValue."]"; 73 51 our $selection = $ARGS{'selection'}; 52 $wholefile =~ s/\s+/ /g; 53 my @matchcount = $wholefile =~ m/$selection/g; 54 unless ($#matchcount > 1) { 55 my $twig= new XML::Twig(TwigHandlers => { 'sent' => \&sentence, 'title', \&title }, 56 TwigRoots => {body => 1}); 57 $twig->parsefile($mastertext); # parsing also looks for matches 58 } 59 else { $matched = 100; } 60 if ($matched < 1) { 61 &noMatch; 62 } 63 elsif ($matched == 1) { 64 # print "notesubj is: $notesubj\ntkt_body is:\n$ticket_body\n\n"; 65 &oneMatch; 66 } 67 elsif ($matched > 1) { 68 &manyMatches; 69 } 70 71 sub sentence { 72 73 if ($selection) { 74 my ($twig, $sent) = @_; 75 my $sent_txt = $sent->text; 76 our $msg; 77 $sent_txt =~ s/\s+/ /g; 78 # $sent_txt =~ s/\(/\\(/g; 79 # $sent_txt =~ s/\)/\\)/g; 80 # print "s: $sent_txt\n"; 81 # print "sent_txt is ".$sent_txt."\n"; 82 print STDERR "$sent_txt =~ $selection\n"; 83 if ($sent_txt =~ /$selection/s) { 84 print STDERR "got a match\n"; 85 $startid = $sent->att('id'); 86 $dompath = $sent->parent->parent->parent->name."/".$sent->parent->parent->name."[id=".$sent->parent->parent->id."]/".$sent->parent->name."[id=".$sent->parent->id."]/".$sent->name."[id=".$sent->id."]"; 87 print STDERR "dompath is $dompath\n"; 88 $matched++; 89 $form = &offerTicket; 90 # my $CurrentUser = getEmailUser($msg->header->{'from'}); 91 } 74 92 } 75 93 } 76 94 77 #print $startid."\n".$dompath."\n"; 78 # Avoid memory leaks - cleanup circular references for garbage collection 79 $doc->dispose; 95 sub title { 96 if ($selection) { 97 my ($twig, $title) = @_; 98 my $title_txt = $title->text; 99 $title_txt =~ s/\n/ /g; 100 print STDERR "$title_txt =~ $selection\n"; 101 if ($title_txt =~ /$selection/s) { 102 print STDERR "got a match\n"; 103 our $startid = $title->parent->att('id'); 104 our $dompath = $title->parent->parent->name."[id=".$title->parent->parent->id."]/".$title->parent->name."[id=".$title->parent->id."]/".$title->name."[id=".$title->id."]"; 105 print "matched \"$selection\" in $startid\n (context: $dompath)\n"; 106 $matched++; 107 our $form = &offerTicket; 108 # my $CurrentUser = getEmailUser($msg->header->{'from'}); 109 } 110 } 111 } 112 113 sub offerTicket { 114 $form = <<"EOT"; 115 EOT 116 return $form; 117 } 118 sub noMatch { 119 #print "no match: $selection\n"; 120 # print "sending to $addr"; 121 # sendMail("/var/www/stet/email-reply-template-notfound.txt",$addr); 122 } 123 124 sub oneMatch { 125 # print "matched: $selection\n"; 126 # print "sending to $addr"; 127 # sendMail("/var/www/stet/email-reply-template-created.txt",$addr); 128 } 129 130 sub manyMatches { 131 # print "sending to $addr"; 132 # sendMail("/var/www/stet/email-reply-template-toomany.txt",$addr); 133 } 134 135 print STDERR <<"EOT"; 136 <dp>$dompath</dp> 137 <sl>$selection</sl> 138 <si>$startid</si> 139 <fn>gplv3-draft-1</fn> 140 EOT 80 141 81 142 $r->content_type('text/xml'); trunk/rtNoAuth/getannotations-devel.html
r65 r69 35 35 % if ($item) { 36 36 <anf> 37 <n><% $item->Transactions->First->Content%></n>37 <n><% ptag($item->Transactions->First->Content) %></n> 38 38 %# <e><% $item->FirstCustomFieldValue('NoteEndNodeId') %></e> 39 39 %# <s><% cleanNoteSel(\$item) %></s> … … 83 83 $r->content_type('text/xml'); 84 84 85 85 sub ptag { 86 my $cont = shift; 87 if ($cont =~ s/(\S)\n\n(\S)/$1<\/p><p>\n$2/gs) { 88 $cont = "<p style=\"display: inline\">$cont</p>"; 89 } 90 return $cont; 91 } 86 92 </%INIT> 87 93 <%ARGS> trunk/rtNoAuth/getannotations.html
r51 r69 35 35 % if ($item) { 36 36 <anf> 37 <n><% $item->Transactions->First->Content%></n>37 <n><% ptag($item->Transactions->First->Content) %></n> 38 38 %# <e><% $item->FirstCustomFieldValue('NoteEndNodeId') %></e> 39 39 %# <s><% cleanNoteSel(\$item) %></s> … … 83 83 $r->content_type('text/xml'); 84 84 85 85 sub ptag { 86 my $cont = shift; 87 if ($cont =~ s/(\S)\n\n(\S)/$1<\/p><p>\n$2/gs) { 88 $cont = "<p style=\"display: inline\">$cont</p>"; 89 } 90 return $cont; 91 } 86 92 </%INIT> 87 93 <%ARGS> trunk/rtNoAuth/readsay-ancestry.html
r64 r69 22 22 %# along with this software. If not, see <http://www.gnu.org/licenses/>. 23 23 %# 24 %25 24 % sub displayTicket($$$); 26 25 % … … 30 29 <title>read GPLv3 comments: <% humanQuery($ARGS{'Query'}) || $ARGS{'id'} %></title> 31 30 <link rel="stylesheet" type="text/css" href="/comments/stet.css" /> 31 <script type="text/javascript" src="/comments/prototype.js"></script> 32 <script type="text/javascript"> 33 function hideall(class) { 34 var sc = document.getElementsByClassName(class); 35 sc.length.times(function(n) { 36 Element.hide(sc[n]); 37 }); 38 39 } 40 function showall(class) { 41 var sc = document.getElementsByClassName(class); 42 sc.length.times(function(n) { 43 Element.show(sc[n]); 44 }); 45 } 46 function togExp(el) { 47 if (el.innerHTML.indexOf('collapse') != -1) { 48 el.innerHTML = "expand children"; 49 el.setAttribute('onclick',"showall('child'); togExp(this); return false;"); 50 } 51 else { 52 el.innerHTML = "collapse children"; 53 el.setAttribute('onclick',"hideall('child'); togExp(this); return false;"); 54 } 55 } 56 </script> 32 57 </head> 33 58 <body> … … 39 64 % if ($Tickets->CountAll() > $Rows) { 40 65 % if ($StartAt > 1 ) { 41 <a href="/comments/rt/ readsay.html?Query=<% $ARGS{'Query'} |n %>&Rows=<%$Rows%>&StartAt=<% (($StartAt - $Rows) < 0) ? 1 : ($StartAt - $Rows) |n%>">prev <% $Rows %></a>66 <a href="/comments/rt/summarydecision.html?filename=<% $filename %>&Query=<% $ARGS{'Query'} |n %>&Rows=<%$Rows%>&StartAt=<% (($StartAt - $Rows) < 0) ? 1 : ($StartAt - $Rows) |n%>">prev <% $Rows %></a> 42 67 % } 43 68 % if (($Tickets->CountAll() > $Rows) && ($Tickets->CountAll() < $StartAt + $Rows)) { … … 45 70 % } 46 71 % if ($Tickets->CountAll() > $StartAt + $Rows) { 47 <a href="/comments/rt/ readsay.html?Query=<% $ARGS{'Query'} |n %>&Rows=<%$Rows%>&StartAt=<% $StartAt + $Rows %>">next <% $Rows %></a>72 <a href="/comments/rt/summarydecision.html?filename=<% $filename %>&Query=<% $ARGS{'Query'} |n %>&Rows=<%$Rows%>&StartAt=<% $StartAt + $Rows %>">next <% $Rows %></a> 48 73 % } 49 74 %} 50 75 ) 51 <a href="/comments/rt/changeshown.html?came_from=rt/ readsay.html">search</a>76 <a href="/comments/rt/changeshown.html?came_from=rt/summarydecision.html&filename=<% $filename %>">search</a> 52 77 <%perl> 53 78 $Tickets->GotoFirstItem; … … 59 84 </%perl> 60 85 % } elsif ($Ticket) { 61 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'} %>#<% $Ticket->FirstCustomFieldValue('NoteStartNodeId')%>">[see on license]</a> <a href="/comments/rt/changeshown.html?came_from=<% stripCrap($Ticket->FirstCustomFieldValue('NoteUrl')) %>">search</a>86 Showing comment <a href="/comments/rt/summarydecision.html?filename=<% $filename %>&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> 62 87 % } 63 88 % if ($name) { 64 89 </span><span id="login" class="login">you are <% $name %>: <a href="http://gplv3.fsf.org/logout">logout</a></span></div> 65 90 % } else { 66 </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>91 </span><span id="login" class="login">you could <a href="http://gplv3.fsf.org/login_form?came_from=/comments/rt/summarydecision.html?filename=<% $filename %>&<% $Tickets ? 'Query='.$ARGS{'Query'} : 'id='.$ARGS{'id'} %>&filename=<% $filename %>">login</a></span></div> 67 92 % } 68 93 <& header.html, name => $name &> … … 90 115 % if (!$deletelink) { 91 116 % if ($resp == 1) { 92 <form action="readsay.html" method="POST" name="TicketUpdate" enctype="multipart/form-data"> 117 <form action="summarydecision.html" method="POST" name="TicketUpdate" enctype="multipart/form-data"> 118 <input type="hidden" name="filename" value="<% $filename %>"> 93 119 <input type="hidden" name="id" value="<% $item->id %>"> 94 120 % } … … 96 122 97 123 % if ($item->QueueObj->CurrentUserHasRight('SeeQueue')) { 98 <div class="onecomment<% ($item->QueueObj->Name =~ /Drafter/) && " Drafter" %>"> 99 <h4><% ($item->QueueObj->Name =~ /Drafter/) && " Drafter's " %><% thingType(\$item) %> <a href="readsay.html?id=<% $item->id %>"><% $item->id %>: <% $item->Subject %></a> 124 <div class="onecomment<% ($item->QueueObj->Name =~ /Drafter/) && " Drafter" %><% $deletelink && " child\" id=\"child".$item->id |n %>"> 125 <h4><% ($item->QueueObj->Name =~ /Drafter/) && " Drafter's " %><% thingType(\$item) %> <a href="summarydecision.html?filename=<% $filename %>&id=<% $item->id %>"><% $item->id %>: <% $item->Subject %></a> 126 % if ($item->Queue == $fsfqueue) { 127 <div class="admin">This issue has been escalated to the Drafters <!-- by fixme --> </div> 128 % } 100 129 % if (($HasIssueRights) && ($showactions) && ($deletelink)) { 101 130 <span class="TktInput">[dissociate: <INPUT TYPE=CHECKBOX NAME="<% $deletelink %>" value="1">]</span> … … 103 132 </h4> 104 133 % if (!$deletelink) { 105 % while (my $link = $item->MemberOf->Next) { 106 <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"> 107 % 108 % if ($HasIssueRights == 1) { 109 <span class="TktInput">[dissociate from parent: <INPUT TYPE=CHECKBOX NAME="DeleteLink--<% $link->Type %>-<% $link->Target %>" value="1">]</span> 110 % } 111 <br/> 112 % } 134 %# while (my $link = $item->DependsOn->Next) { 135 %# <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"> 136 %# while (my $link = $item->DependsOn->Next) { 137 <span class="formHelpIsh">This <% thingType(\$item) %> is part of the discussion on:<br/> <% listAncestry(\$item,0) |n%></span><span class="TktInput"> 138 % 139 %# if ($HasIssueRights == 1) { 140 %# <span class="TktInput">[dissociate from parent: <INPUT TYPE=CHECKBOX NAME="DeleteLink--<% $link->Type %>-<% $link->Target %>" value="1">]</span> 141 % # } 142 %# <br/> 143 %# } 113 144 114 145 % } 115 146 <br/> 116 147 <span class="formHelpIsh">Regarding the text:</span> <span class="ontextText"><q><% $scrubber->scrub($item->FirstCustomFieldValue('NoteSelection')) %></q></span><br/> 117 <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/>148 <span class="formHelpIsh">In section: <span class="nodeLink"><a href="/comments/rt/summarydecision.html?filename=<% $filename %>&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/> 118 149 %# 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/> 119 150 <span class="formHelpIsh">Submitted by: <% userlink(\$item, \$item) |n%> <span class="date">on <% doDate(\$item) %></span></span><br/> 151 <% listAgree(\$item) %> 120 152 %# my ($agrees,$agr_count) = showAgree(\$item); 121 153 %# print STDERR "agree is $agree\n"; … … 125 157 <br/> 126 158 <% getThread(\$item) |n %> 127 128 % if ($item->Members->GotoFirstItem) { 159 <br/><strong><a href="#" onclick="hideall('child'); togExp(this); return false;">collapse children</a></strong><br> 160 161 % if ($item->DependedOnBy->GotoFirstItem) { 129 162 <em>this <% thingType(\$item) %> does not have any children </em><br/> 130 163 % } 131 164 <br/> 132 % while (my $link = $item-> Members->Next) {133 <span class="TktLabel">Child comment of <% $item->id %>: </span>165 % while (my $link = $item->DependedOnBy->Next) { 166 <span class="TktLabel">Child comment of <% $item->id %>: <a href="#" onclick="javascript:Element.toggle(document.getElementById('child<% $link->BaseURI->Object->id %>'));return false;"><% $link->BaseURI->Object->id %>: <% $link->BaseURI->Object->Subject %> ±</a></span><br/> 134 167 % my $child = RT::Ticket->new($CurrentUser); 135 168 % $child->Load($link->BaseURI->Object->id); … … 141 174 <br/> 142 175 <span class="TktLabel">Children:</span><br/> 143 <span class="TktInput indent">add new: <INPUT NAME=" MemberOf-<% $item->id %>"> <span class="inputcaption">[comment id numbers, space separated]</span></span>176 <span class="TktInput indent">add new: <INPUT NAME="DependsOn-<% $item->id %>"> <span class="inputcaption">[comment id numbers, space separated]</span></span> 144 177 % } 145 178 % if (($showactions) & (!$deletelink)){ … … 147 180 % if ($HasIssueRights) { 148 181 <span class="TktLabel">Parents:</span><br/> 149 <span class="TktInput indent">add new: <INPUT NAME="<% $item->id %>- MemberOf"> <span class="inputcaption">[comment id numbers, space separated]</span></span>182 <span class="TktInput indent">add new: <INPUT NAME="<% $item->id %>-DependsOn"> <span class="inputcaption">[comment id numbers, space separated]</span></span> 150 183 % } 151 184 <br/> … … 198 231 </select><br/></span> 199 232 % 200 % if (($HasIssueRights) && ($item->Queue != $issuequeue)) { 201 <input type="checkbox" value="1" name="MakeIssue"/><span class="TktLabel"> Upgrade this to an Issue</span><br/> 202 % } 203 % if (($HasIssueRights) && ($item->Queue == $issuequeue)) { 204 <input type="checkbox" value="1" name="NonIssue"/><span class="TktLabel"> Downgrade this Issue to a Comment</span><br/> 233 % if (($HasIssueRights) && ($item->Queue != ($issuequeue || $fsfqueue ))) { 234 <input type="checkbox" value="1" name="MakeIssue"/><span class="TktLabel"> Upgrade this Comment to an Issue</span><br/> 235 236 % } 237 % if (($HasIssueRights) && ($item->Queue == ($issuequeue || $fsfqueue))) { 238 <div class="admin box"> 239 <input type="radio" value="Escalated" name="ChangeQueue"/><span class="TktLabel"> Escalate this for FSF review (intentionally hard to undo)</span><br/> 240 <input type="radio" value="Inbox" name="ChangeQueue"/><span class="TktLabel"> Downgrade this Issue to a Comment</span></div> 205 241 % } 206 242 % if ($item->OwnerObj->Name =~ "Nobody") { … … 246 282 require "/var/www/stet/stetsubs.pl"; 247 283 our $issuequeue = 5; 284 our $fsfqueue = 6; 248 285 my $rc = 0; 249 286 our ($name, $resp, $CurrentUser, $HasIssueRights); … … 276 313 $Ticket->SetQueue($issuequeue); 277 314 } 278 if ($ARGS{' NonIssue'}) {279 $Ticket->SetQueue( 'Inbox');315 if ($ARGS{'ChangeQueue'}) { 316 $Ticket->SetQueue($ARGS{'ChangeQueue'}); 280 317 } 281 318 … … 306 343 if ($item->Queue == 5) { 307 344 return "Issue"; 345 } 346 elsif ($item->Queue == 6) { 347 return "Escalated Issue"; 308 348 } 309 349 else { … … 347 387 # } 348 388 349 $allcomments .= "<span class=\"formHelpIsh\"> Commentnoted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n";389 $allcomments .= "<span class=\"formHelpIsh\">noted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n"; 350 390 $allcomments .= "<blockquote><h4>$subj</h4>\n".$cont."</blockquote>\n"; 351 391 … … 381 421 } 382 422 383 sub getTZ($) { 423 sub getTZ($) { # RT doesn't store dates with timezones. 424 # this implementation is somehow wrong, though... 384 425 my $date = shift; 385 426 $date =~ s/\d\d\d\d-(\d\d)-\d\d.*/$1/; … … 393 434 394 435 return $eastern; 436 } 437 438 sub listAgree($) { 439 my $item = shift; 440 my $agr_vals; 441 my $showagree = ''; 442 $agr_vals = $$item->CustomFieldValues(7); 443 while (my $value = $agr_vals->Next) { 444 $showagree .= $value->Content.", "; 445 } 446 $showagree =~ s/\n,/,/g; 447 $showagree =~ s/, $//g; 448 return $agr_vals->Count. " agree: ".$showagree; 449 } 450 451 sub listAncestry($$) { 452 my $itemref = shift; 453 my $item = $$itemref; 454 my $depth = shift; 455 my $returnlist = ''; 456 while (my $parent = $item->DependsOn->Next) { 457 if ($parent->TargetURI->IsLocal) { 458 my $ptkt = RT::Ticket->new($CurrentUser); 459 $ptkt->Load($parent->TargetObj->id); 460 $depth++; 461 my $fn = stripCrap($item->FirstCustomFieldValue('NoteUrl')); 462 $returnlist = (" " x $depth ). thingType(\$ptkt). "#<a href=\"/comments/rt/summarydecision.html?filename=<% $fn %>&id=".$ptkt->id."\">".$ptkt->id." ".$ptkt->Subject."</a><br/>\n"; 463 464 $returnlist = listAncestry(\$ptkt,$depth) . $returnlist; 465 } 466 $depth--; 467 } 468 469 return $returnlist; 395 470 } 396 471 … … 401 476 $Order => 'DESC' 402 477 $Query => "'CF.NoteUrl' LIKE 'gplv3-draft-1'" 478 $filename => 'gplv3-draft-1' 403 479 $Take => undef 404 480 $Steal => undef trunk/rtNoAuth/readsay-devel.html
r38 r69 22 22 %# along with this software. If not, see <http://www.gnu.org/licenses/>. 23 23 % 24 %25 24 % sub displayTicket($$$); 26 25 % … … 30 29 <title>read GPLv3 comments: <% humanQuery($ARGS{'Query'}) || $ARGS{'id'} %></title> 31 30 <link rel="stylesheet" type="text/css" href="/comments/stet.css" /> 31 <script type="text/javascript" src="/comments/prototype.js"></script> 32 <script type="text/javascript"> 33 function hideall(class) { 34 var sc = document.getElementsByClassName(class); 35 sc.length.times(function(n) { 36 Element.hide(sc[n]); 37 }); 38 39 } 40 function showall(class) { 41 var sc = document.getElementsByClassName(class); 42 sc.length.times(function(n) { 43 Element.show(sc[n]); 44 }); 45 } 46 function togExp(el) { 47 if (el.innerHTML.indexOf('collapse') != -1) { 48 el.innerHTML = "expand children"; 49 el.setAttribute('onclick',"showall('child'); togExp(this); return false;"); 50 } 51 else { 52 el.innerHTML = "collapse children"; 53 el.setAttribute('onclick',"hideall('child'); togExp(this); return false;"); 54 } 55 } 56 </script> 32 57 </head> 33 58 <body> … … 59 84 </%perl> 60 85 % } elsif ($Ticket) { 61 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'} %>#<% $ Ticket->FirstCustomFieldValue('NoteStartNodeId')%>">[see on license]</a> <a href="/comments/rt/changeshown.html?came_from=<% stripCrap($Ticket->FirstCustomFieldValue('NoteUrl')) %>">search</a>86 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> 62 87 % } 63 88 % if ($name) { … … 66 91 </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> 67 92 % } 68 <& header -devel.html, name => $name &>93 <& header.html, name => $name &> 69 94 <div id="readsaymain"> 70 95 <span id="listactions"> … … 88 113 % my $showactions = shift; 89 114 % my $deletelink = shift; 115 % if (!$deletelink) { 116 % if ($resp == 1) { 117 <form action="readsay-devel.html" method="POST" name="TicketUpdate" enctype="multipart/form-data"> 118 <input type="hidden" name="id" value="<% $item->id %>"> 119 % } 120 % } 121 90 122 % if ($item->QueueObj->CurrentUserHasRight('SeeQueue')) { 91 <div class="onecomment"> 92 <h4><% thingType(\$item) %> <a href="readsay.html?id=<% $item->id %>"><% $item->id %>: <% $item->Subject %></a> 123 <div class="onecomment<% ($item->QueueObj->Name =~ /Drafter/) && " Drafter" %><% $deletelink && " child\" id=\"child".$item->id |n %>"> 124 <h4><% ($item->QueueObj->Name =~ /Drafter/) && " Drafter's " %><% thingType(\$item) %> <a href="readsay.html?id=<% $item->id %>"><% $item->id %>: <% $item->Subject %></a> 125 % if ($item->Queue == $fsfqueue) { 126 <div class="admin">This issue has been escalated to the Drafters <!-- by fixme --> </div> 127 % } 93 128 % if (($HasIssueRights) && ($showactions) && ($deletelink)) { 94 129 <span class="TktInput">[dissociate: <INPUT TYPE=CHECKBOX NAME="<% $deletelink %>" value="1">]</span> … … 111 146 %# 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/> 112 147 <span class="formHelpIsh">Submitted by: <% userlink(\$item, \$item) |n%> <span class="date">on <% doDate(\$item) %></span></span><br/> 148 <% listAgree(\$item) %> 113 149 %# my ($agrees,$agr_count) = showAgree(\$item); 114 150 %# print STDERR "agree is $agree\n"; … … 118 154 <br/> 119 155 <% getThread(\$item) |n %> 156 <br/><strong><a href="#" onclick="hideall('child'); togExp(this); return false;">collapse children</a></strong><br> 120 157 121 158 % if ($item->Members->GotoFirstItem) { … … 124 161 <br/> 125 162 % while (my $link = $item->Members->Next) { 126 <span class="TktLabel">Child comment of <% $item->id %>: </span>163 <span class="TktLabel">Child comment of <% $item->id %>: <a href="#" onclick="javascript:Element.toggle(document.getElementById('child<% $link->BaseURI->Object->id %>'));return false;"><% $link->BaseURI->Object->id %>: <% $link->BaseURI->Object->Subject %> ±</a></span><br/> 127 164 % my $child = RT::Ticket->new($CurrentUser); 128 165 % $child->Load($link->BaseURI->Object->id); 129 % my $deletelink = "DeleteLink-". $link->Base ."-". $link->Type ;166 % my $deletelink = "DeleteLink-". $link->Base ."-". $link->Type."-"; 130 167 <% displayTicket(\$child,$showactions,$deletelink) %> 131 168 % } 132 169 <br/> 133 170 % if (($HasIssueRights) && ($showactions) && (!$deletelink)) { 134 171 <br/> … … 137 174 % } 138 175 % if (($showactions) & (!$deletelink)){ 139 % if ($resp == 1) { 140 <form action="readsay.html" method="POST" name="TicketUpdate" enctype="multipart/form-data"> 141 <input type="hidden" name="id" value="<% $item->id %>"> 142 % } 143 176 <br/> 144 177 % if ($HasIssueRights) { 145 <span class="TktLabel">Parents:</span> 178 <span class="TktLabel">Parents:</span><br/> 146 179 <span class="TktInput indent">add new: <INPUT NAME="<% $item->id %>-MemberOf"> <span class="inputcaption">[comment id numbers, space separated]</span></span> 147 180 % } … … 155 188 <A HREF="<% $link->Target %>"><% $link->Target %></A> 156 189 % if ($HasIssueRights) { 157 <span class="TktInput">[delete: <INPUT TYPE=CHECKBOX NAME="DeleteLink- <% $link->Base %>-<% $link->Type %>" value="1">]</span>190 <span class="TktInput">[delete: <INPUT TYPE=CHECKBOX NAME="DeleteLink--<% $link->Base %>-<% $link->Type %>" value="1">]</span> 158 191 % } 159 192 <br/> … … 195 228 </select><br/></span> 196 229 % 197 % if (($HasIssueRights) && ($item->Queue != $issuequeue)) { 198 <input type="checkbox" value="1" name="MakeIssue"/><span class="TktLabel"> Upgrade this to an Issue</span><br/> 199 % } 200 % if (($HasIssueRights) && ($item->Queue == $issuequeue)) { 201 <input type="checkbox" value="1" name="NonIssue"/><span class="TktLabel"> Downgrade this Issue to a Comment</span><br/> 230 % if (($HasIssueRights) && ($item->Queue != ($issuequeue || $fsfqueue ))) { 231 <input type="checkbox" value="1" name="MakeIssue"/><span class="TktLabel"> Upgrade this Comment to an Issue</span><br/> 232 233 % } 234 % if (($HasIssueRights) && ($item->Queue == ($issuequeue || $fsfqueue))) { 235 <div class="admin box"> 236 <input type="radio" value="Escalated" name="ChangeQueue"/><span class="TktLabel"> Escalate this for FSF review (intentionally hard to undo)</span><br/> 237 <input type="radio" value="Inbox" name="ChangeQueue"/><span class="TktLabel"> Downgrade this Issue to a Comment</span></div> 202 238 % } 203 239 % if ($item->OwnerObj->Name =~ "Nobody") { … … 243 279 require "/var/www/stet/stetsubs.pl"; 244 280 our $issuequeue = 5; 281 our $fsfqueue = 6; 245 282 my $rc = 0; 246 283 our ($name, $resp, $CurrentUser, $HasIssueRights); … … 273 310 $Ticket->SetQueue($issuequeue); 274 311 } 275 if ($ARGS{' NonIssue'}) {276 $Ticket->SetQueue( 'Inbox');312 if ($ARGS{'ChangeQueue'}) { 313 $Ticket->SetQueue($ARGS{'ChangeQueue'}); 277 314 } 278 315 … … 302 339 my $item = $$itemref; 303 340 if ($item->Queue == 5) { 304 return "issue"; 341 return "Issue"; 342 } 343 elsif ($item->Queue == 6) { 344 return "Escalated Issue"; 305 345 } 306 346 else { 307 return " comment";347 return "Comment"; 308 348 } 309 349 } … … 344 384 # } 345 385 346 $allcomments .= "<span class=\"formHelpIsh\"> Commentnoted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n";386 $allcomments .= "<span class=\"formHelpIsh\">noted by ". userlink(\$item,\$message) ." <span class=\"date\">on ".doDate(\$message).":</span></span></span>\n"; 347 387 $allcomments .= "<blockquote><h4>$subj</h4>\n".$cont."</blockquote>\n"; 348 388 … … 351 391 } 352 392 else { 353 unless (($Transaction->CreatorObj->Name =~ "RT_System") || ($Transaction->BriefDescription =~ "NoteText|NoteSelection|NodeId ")) {393 unless (($Transaction->CreatorObj->Name =~ "RT_System") || ($Transaction->BriefDescription =~ "NoteText|NoteSelection|NodeId|Agreeer")) { 354 394 355 395 $allcomments .= "<div class=\"formHelpIsh\">".$Transaction->BriefDescription." by ".userlink(\$item,\$Transaction)." <span class=\"date\">on ".doDate(\$Transaction)."</span></div>\n"; … … 368 408 my $msgref = shift; 369 409 my $message = $$msgref; 370 return "<span class=\"userlink\"><a href=\"/comments/".$item->FirstCustomFieldValue('NoteUrl')."?Query=%20Requestor.Name%20LIKE%20'".$message->CreatorObj->Name."'%20AND