[Rt-commit] rtfm branch, 2.4-trunk, updated. 2.4.3-20-g73f1883

Alex Vandiver alexmv at bestpractical.com
Fri Jul 27 17:12:56 EDT 2012


The branch, 2.4-trunk has been updated
       via  73f1883da15efbcf0d6333003dc6356ff06c4454 (commit)
       via  59acdecf449a36cd32efd049d00d4f6c4bf0cb62 (commit)
       via  0ba599360436fac6c2a5e6d40c7ad97db048daef (commit)
       via  5d07069cab0e34774a26a83ef4f06deb08f7b56e (commit)
       via  bedf6db4d3f57557aff172d678f20c6feec72f05 (commit)
       via  46693d1832c87cf4c53ab611cb725faac5992c65 (commit)
       via  a1aea35341acdd2b79e9d2c2b2fc634c3d5e0cd7 (commit)
       via  38f114fd064366743cbaa3792752aa753e54425a (commit)
      from  be302f4967d70eef1955a6c293dc29bfe7da0b52 (commit)

Summary of changes:
 Changelog                                          |  29 +++
 META.yml                                           |   2 +-
 .../CustomFields/RTFM-Class-RTFM-Article.html      |   5 +-
 html/Admin/RTFM/Classes/CustomFields.html          |   5 +-
 html/Admin/RTFM/Classes/GroupRights.html           |   5 +-
 html/Admin/RTFM/Classes/Modify.html                |   5 +-
 html/Admin/RTFM/Classes/Topics.html                |   5 +-
 html/Admin/RTFM/Classes/UserRights.html            |   5 +-
 html/Admin/RTFM/Classes/index.html                 |   5 +-
 html/Admin/RTFM/Elements/ClassTabs                 |   5 +-
 html/Admin/RTFM/Elements/GlobalTabs                |   5 +-
 html/Admin/RTFM/Elements/Header                    |   5 +-
 html/Admin/RTFM/Elements/Tabs                      |   5 +-
 html/Admin/RTFM/Elements/Topics                    |   7 +-
 html/Admin/RTFM/Global/GroupRights.html            |   5 +-
 html/Admin/RTFM/Global/Topics.html                 |   5 +-
 html/Admin/RTFM/Global/UserRights.html             |   5 +-
 html/Admin/RTFM/Global/index.html                  |   5 +-
 html/Admin/RTFM/index.html                         |   5 +-
 .../RTFM/Admin/Elements/CustomFieldTabs/Default    |   5 +-
 html/Callbacks/RTFM/Admin/Elements/Tabs/Default    |   5 +-
 .../Admin/Global/CustomFields/index.html/Default   |   5 +-
 html/Callbacks/RTFM/Admin/index.html/Default       |   5 +-
 .../RTFM/Elements/EditLinks/ExtraLinkInstructions  |   5 +-
 html/Callbacks/RTFM/Elements/Header/Head           |   5 +-
 html/Callbacks/RTFM/Elements/MessageBox/Default    |   5 +-
 html/Callbacks/RTFM/Elements/Tabs/Default          |   5 +-
 html/Callbacks/RTFM/RTIR/Elements/Tabs/Default     |   5 +-
 .../RTFM/SelfService/Elements/Tabs/Default         |   5 +-
 .../Callbacks/RTFM/Ticket/Create.html/BeforeCreate |   5 +-
 .../RTFM/Ticket/Create.html/BeforeMessageBox       |   5 +-
 html/Callbacks/RTFM/Ticket/Elements/Tabs/Default   |   5 +-
 .../RTFM/Ticket/Update.html/BeforeMessageBox       |   5 +-
 html/Callbacks/RTFM/autohandler/Default            |   5 +-
 html/Elements/RT__FM__ClassCollection/ColumnMap    |   5 +-
 html/NoAuth/webrtfm.css                            |   5 +-
 html/RTFM/Article/Delete.html                      |   5 +-
 html/RTFM/Article/Display.html                     |   5 +-
 html/RTFM/Article/Edit.html                        |   5 +-
 html/RTFM/Article/Elements/EditBasics              |   5 +-
 html/RTFM/Article/Elements/EditCustomFields        |   5 +-
 html/RTFM/Article/Elements/EditLinks               |   5 +-
 html/RTFM/Article/Elements/EditTopics              |  60 +++--
 html/RTFM/Article/Elements/LinkEntryInstructions   |   5 +-
 html/RTFM/Article/Elements/Preformatted            |   5 +-
 html/RTFM/Article/Elements/SearchByCustomField     |   5 +-
 html/RTFM/Article/Elements/SelectSavedSearches     |   5 +-
 html/RTFM/Article/Elements/SelectSearchPrivacy     |   5 +-
 html/RTFM/Article/Elements/ShowHistory             |   5 +-
 html/RTFM/Article/Elements/ShowLinks               |   5 +-
 html/RTFM/Article/Elements/ShowSavedSearches       |   5 +-
 html/RTFM/Article/Elements/ShowSearchCriteria      |   5 +-
 html/RTFM/Article/Elements/ShowSearchResults       |   5 +-
 html/RTFM/Article/Elements/ShowTopics              |   5 +-
 html/RTFM/Article/Elements/Tabs                    |   5 +-
 html/RTFM/Article/ExtractFromTicket.html           |   5 +-
 html/RTFM/Article/ExtractIntoClass.html            |   5 +-
 html/RTFM/Article/ExtractIntoTopic.html            |   5 +-
 html/RTFM/Article/History.html                     |   5 +-
 html/RTFM/Article/PreCreate.html                   |   5 +-
 html/RTFM/Article/Search.html                      |   5 +-
 html/RTFM/Elements/BeforeMessageBox                |   5 +-
 html/RTFM/Elements/CreateArticle                   |   5 +-
 html/RTFM/Elements/Error                           |   5 +-
 html/RTFM/Elements/GotoArticle                     |   5 +-
 html/RTFM/Elements/Header                          |   5 +-
 html/RTFM/Elements/NewestArticles                  |   5 +-
 html/RTFM/Elements/QuickSearch                     |   5 +-
 html/RTFM/Elements/SelectClass                     |   5 +-
 html/RTFM/Elements/ShowTopic                       |   5 +-
 html/RTFM/Elements/ShowTopicLink                   |  27 +++
 html/RTFM/Elements/Tabs                            |   5 +-
 html/RTFM/Elements/UpdatedArticles                 |   5 +-
 html/RTFM/Topics.html                              | 254 ++++++++-------------
 html/RTFM/index.html                               |   5 +-
 html/Search/Elements/Article                       |   5 +-
 html/SelfService/Article/Display.html              |   5 +-
 html/SelfService/Article/Search.html               |   5 +-
 html/SelfService/Article/autohandler               |   5 +-
 html/SelfService/Elements/SearchArticle            |   5 +-
 lib/RT/FM.pm                                       |   2 +-
 lib/RT/FM/Article.pm                               |   2 +-
 lib/RT/FM/ArticleCollection.pm                     |   2 +-
 lib/RT/FM/ArticleCollection_Overlay.pm             |   2 +-
 lib/RT/FM/Article_Overlay.pm                       |  13 +-
 lib/RT/FM/Class.pm                                 |   2 +-
 lib/RT/FM/ClassCollection.pm                       |   2 +-
 lib/RT/FM/ClassCollection_Overlay.pm               |   2 +-
 lib/RT/FM/Class_Overlay.pm                         |   2 +-
 lib/RT/FM/ObjectTopic.pm                           |   2 +-
 lib/RT/FM/ObjectTopicCollection.pm                 |   2 +-
 lib/RT/FM/ObjectTopicCollection_Overlay.pm         |   2 +-
 lib/RT/FM/Record.pm                                |   2 +-
 lib/RT/FM/SearchBuilder.pm                         |   2 +-
 lib/RT/FM/System.pm                                |   2 +-
 lib/RT/FM/Topic.pm                                 |   2 +-
 lib/RT/FM/TopicCollection.pm                       |   2 +-
 lib/RT/FM/TopicCollection_Overlay.pm               |   2 +-
 lib/RT/FM/Topic_Overlay.pm                         |   2 +-
 lib/RT/URI/a.pm                                    |   2 +-
 lib/RT/URI/fsck_com_rtfm.pm                        |   2 +-
 tools/license_tag                                  |   2 +-
 102 files changed, 436 insertions(+), 368 deletions(-)
 create mode 100644 html/RTFM/Elements/ShowTopicLink

- Log -----------------------------------------------------------------
commit 38f114fd064366743cbaa3792752aa753e54425a
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Fri Jan 6 20:26:19 2012 -0500

    Rework topic display to not make use of $m->print everywhere
    
    This closes a number of XSS vulnerabilities concerning topic names.
    
    This commit resolves CVE-2012-2768.

diff --git a/html/RTFM/Article/Elements/EditTopics b/html/RTFM/Article/Elements/EditTopics
index e28f348..58143b8 100644
--- a/html/RTFM/Article/Elements/EditTopics
+++ b/html/RTFM/Article/Elements/EditTopics
@@ -46,35 +46,32 @@
 %#%# END BPS TAGGED BLOCK }}}
 <input type="hidden" name="EditTopics" value="1" />
 <select multiple size="10" name="Topics">
-<%perl>
-if (@Classes) {
-  $m->print("<optgroup label=\"Current classes (".join (' ',map {$_->Name} @Classes).")\">")
-    unless $OnlyThisClass;
-  $inTree->traverse(sub {
-    my $tree = shift;
-    my $topic = $tree->getNodeValue;
-    $m->print("<option value=\"".$topic->Id."\""
-      .(exists $topics{$topic->Id} ? " selected" : "").">"
-      .(" " x ($tree->getDepth*5)).($topic->Name || loc("(no name)"))."</option>\n");
-  });
-}
-unless ($OnlyThisClass) {
-  my $class = $Classes[-1]->Id;
-  $otherTree->traverse(sub {
-    my $tree = shift;
-    my $topic = $tree->getNodeValue;
-    unless ($topic->ObjectId == $class) {
-      $class = $topic->ObjectId;
-      $m->print("</optgroup>\n");
-      my $c = new RT::FM::Class($session{'CurrentUser'});
-      $c->Load($topic->ObjectId);
-      $m->print("<optgroup label=\"".$c->Name."\">\n");
-    }
-    $m->print("<option value=\"".$topic->Id."\""
-      .(exists $topics{$topic->Id} ? " selected" : "").">"
-      .(" " x ($tree->getDepth*5)).($topic->Name || loc("(no name)"))."</option>\n");
-  });
-</%perl>
+% if (@Classes) {
+%   unless ($OnlyThisClass) {
+<optgroup label="Current classes (<% join(" ", map {$_->Name} @Classes) %>)">
+%   }
+%   $inTree->traverse(sub {
+%     my $tree = shift;
+%     my $topic = $tree->getNodeValue;
+<option value="<% $topic->Id %>" <% exists $topics{$topic->Id} ? "selected" : "" %> >\
+<% " " x ($tree->getDepth*5) |n %><% $topic->Name || loc("(no name)") %></option>
+%   });
+% }
+% unless ($OnlyThisClass) {
+%   my $class = $Classes[-1]->Id;
+%   $otherTree->traverse(sub {
+%     my $tree = shift;
+%     my $topic = $tree->getNodeValue;
+%     unless ($topic->ObjectId == $class) {
+%       $class = $topic->ObjectId;
+</optgroup>
+%       my $c = RT::FM::Class->new($session{'CurrentUser'});
+%       $c->Load($topic->ObjectId);
+<optgroup label="<% $c->Name %>">
+%     }
+<option value="<% $topic->Id %>" <% exists $topics{$topic->Id} ? "selected" : "" %> >\
+<% " " x ($tree->getDepth*5) |n %><% $topic->Name || loc("(no name)") %></option>
+%   });
 </optgroup>
 % }
 </select>
diff --git a/html/RTFM/Elements/ShowTopicLink b/html/RTFM/Elements/ShowTopicLink
new file mode 100644
index 0000000..b03581e
--- /dev/null
+++ b/html/RTFM/Elements/ShowTopicLink
@@ -0,0 +1,27 @@
+<%args>
+$Topic
+$Class => 0
+</%args>
+% if ($Link) {
+<a href="Topics.html?id=<% $Topic->Id %>&class=<% $Class %>">\
+% }
+<% $Topic->Name() || loc("(no name)") %>\
+% if ($Topic->Description) {
+: <% $Topic->Description %>
+% }
+
+% if ( $Articles->Count ) {
+ (<&|/l, $Articles->Count &>[quant,_1,article]</&>)
+% }
+
+% if ($Link) {
+</a>
+% }
+
+<%init>
+my $Articles = RT::FM::ObjectTopicCollecion->new( $session{'CurrentUser'} );
+$Articles->Limit( FIELD => 'ObjectType', VALUE => 'RT::FM::Article' );
+$Articles->Limit( FIELD => 'Topic',      VALUE => $Topic->Id );
+
+my $Link = $Topic->Children->Count || $Articles->Count;
+</%init>
diff --git a/html/RTFM/Topics.html b/html/RTFM/Topics.html
index 43caf22..8f87a5f 100644
--- a/html/RTFM/Topics.html
+++ b/html/RTFM/Topics.html
@@ -46,7 +46,6 @@
 %#%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, current_toptab => "RTFM/Topics.html", Title => loc('Browse by topic'), class => $class, topic => $id &>
 
-<& /Elements/ListActions, actions => \@Actions &>
 <a href="Topics.html"><&|/l&>All topics</&></a>
 % if (defined $class) {
 > <a href="Topics.html?class=<%$currclass_id%>"><% $currclass_name %></a>
@@ -57,71 +56,41 @@
 % }
 <br />
 <h1><&|/l&>Browse by topic</&></h1>
-<%perl>
-if (defined $class) {
-   $m->print('<h2>'.'<a href="'.
-   $RT::WebPath."/RTFM/Topics.html?class=" . $currclass_id
-   .'">'.$currclass_name."</a></h2>\n");
-   ProduceTree(\@Actions, $currclass, $currclass_id, $currclass_name, 0, $id);
-} else {
-    $m->print("<ul>\n");
-    while (my $c = $Classes->Next) {
-        $m->print('<li><h2>'.'<a href="'.
-        $RT::WebPath."/RTFM/Topics.html?class=" . $c->Id
-        .'">'.$c->Name."</a></h2>\n");
-        $m->print("\n</li>\n");
-    }
-    $m->print(qq|<li><h2><a href="$RT::WebPath/RTFM/Topics.html?class=0">Global Topics</a></h2></li>\n|);
-    $m->print("</ul>\n");
-}
-</%perl>
+% if (defined $class) {
+<h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $currclass_id %>"><% $currclass_name %></a></h2>
+%     my $rtopic = RT::FM::Topic->new( $session{'CurrentUser'} );
+%     $rtopic->Load($id);
+%     unless ( $rtopic->Id()
+%         && $rtopic->ObjectId() == $currclass->Id )
+%     {
+%         # Show all of them
+%         $ProduceTree->( 0 );
+%     } else {
+%         my @showtopics = ( $rtopic );
+%         my $parent = $rtopic->ParentObj;
+%         while ( $parent->Id ) {
+%             unshift @showtopics, $parent;
+%             $parent = $parent->ParentObj;
+%         }
+%         # List the topics.
+%         for my $t ( @showtopics ) {
+<ul><li><& /Articles/Elements/ShowTopicLink, Topic => $t, Class => $currclass_id &>
+%             $ProduceTree->( $id ) if $t->Id == $id;
+%         }
+%         for ( @showtopics ) {
+              </li></ul>
+%         }
+%     }
+% } else {
+<ul>
+%     while (my $c = $Classes->Next) {
+<li><h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=<% $c->Id %>"><% $c->Name %></a></h2></li>
+%     }
+<li><h2><a href="<% RT->Config->Get('WebPath') %>/Articles/Topics.html?class=0"><&|/l&>Global Topics</&></a></h2></li>
+</ul>
+% }
 
 <br />
-<%perl>
-my @articles;
-if ($id or $showall) {
-    my $Articles = RT::FM::ObjectTopicCollection->new($session{'CurrentUser'});
-    $Articles->Limit(FIELD => 'ObjectType', VALUE => 'RT::FM::Article');
-    if ($id) {
-        $Articles->Limit(FIELD => 'Topic', VALUE => $id, ENTRYAGGREGATOR => 'OR');
-        if ($showall) {
-            my $kids = $currtopic->Children;
-            while (my $k = $kids->Next) {
-                $Articles->Limit(FIELD => 'Topic', VALUE => $k->Id,
-                                 ENTRYAGGREGATOR => 'OR');
-            }
-        }
-    }
-    @articles = map {$a = RT::FM::Article->new($session{'CurrentUser'}); $a->Load($_->ObjectId); $a} @{$Articles->ItemsArrayRef}
-} elsif ($class) {
-    my $Articles = RT::FM::ArticleCollection->new($session{'CurrentUser'});
-    my $TopicsAlias = $Articles->Join(
-        TYPE   => 'left',
-        ALIAS1 => 'main',
-        FIELD1 => 'id',
-        TABLE2 => 'FM_ObjectTopics',
-        FIELD2 => 'ObjectId',
-    );
-    $Articles->Limit(
-        LEFTJOIN => $TopicsAlias,
-        FIELD    => 'ObjectType',
-        VALUE    => 'RT::FM::Article',
-    );
-    $Articles->Limit(
-        ALIAS      => $TopicsAlias,
-        FIELD      => 'Topic',
-        OPERATOR   => 'IS',
-        VALUE      => 'NULL',
-        QUOTEVALUE => 0,
-    );
-    $Articles->Limit(
-        FIELD      => 'Class',
-        OPERATOR   => '=',
-        VALUE      => $class,
-    );
-    @articles = @{$Articles->ItemsArrayRef};
-}
-</%perl>
 
 % if (@articles) {
 %   if ($id) {
@@ -137,7 +106,6 @@ if ($id or $showall) {
 % }
 
 <%init>
-my @Actions;
 my $Classes;
 my $currclass;
 my $currclass_id;
@@ -165,106 +133,65 @@ if ($id) {
     $currtopic->Load($id);
 }
 
-# A subroutine that iterates through topics and their children, producing
-# the necessary ul, li, and href links for the table of contents.  Thank
-# heaven for query caching.  The $restrict variable is used to display only
-# the branch of the hierarchy which contains that topic ID.
-
-sub ProduceTree {
-    my ( $Actions, $currclass, $currclass_id, $currclass_name, $parentid, $restrictid ) = @_;
-    $parentid = 0 unless $parentid;
-
-    # Deal with tree restriction, if any.
-    if ($restrictid) {
-        my $rtopic = RT::FM::Topic->new( $session{'CurrentUser'} );
-        $rtopic->Load($restrictid);
-        unless ( $rtopic->Id()
-            && $rtopic->ObjectId() == $currclass_id )
-        {
-            push( @{$Actions},"Could not restrict view to topic $restrictid");
-
-            # Start over, without the restriction.
-            &ProduceTree( $Actions, $currclass, $currclass_id, $currclass_name, $parentid, undef );
-        } else {
-            my @showtopics;
-            push( @showtopics, $rtopic );
-            my $parent = $rtopic->ParentObj;
-            while ( $parent->Id ) {
-                push( @showtopics, $parent );
-                my $newparent = $parent->ParentObj;
-                $parent = $newparent;
-            }
-
-            # List the topics.
-            my $indents = @showtopics;
-            while ( my $t = pop @showtopics ) {
-                print "<ul>";
-                print &MakeLinks( $t, $currclass, $currclass_id, $currclass_name, $t->Children->Count );
-                if ( $t->Id == $restrictid ) {
-                    &ProduceTree( $Actions, $currclass, $currclass_id, $currclass_name, $restrictid, undef );
-                }
-            }
-            print "</ul>" x $indents;
-        }
-    } else {
-
-        # No restriction in place.  Build the entire tree.
-        my $topics = RT::FM::TopicCollection->new( $session{'CurrentUser'} );
-        $topics->LimitToObject($currclass);
-        $topics->LimitToKids($parentid);
-        $topics->OrderBy( FIELD => 'Name' );
-        print "<ul>" if $topics->Count;
-        while ( my $t = $topics->Next ) {
-            if ( $t->Children->Count ) {
-                print &MakeLinks( $t, $currclass, $currclass_id, $currclass_name, 1 );
-                &ProduceTree( $Actions, $currclass, $currclass_id, $currclass_name, $t->Id );
-            } else {
-                print &MakeLinks( $t, $currclass, $currclass_id, $currclass_name, 0 );
-            }
-        }
-        print "</ul>\n" if $topics->Count;
+my $ProduceTree;
+$ProduceTree = sub {
+    my ( $parentid ) = @_;
+    my $topics = RT::FM::TopicCollection->new( $session{'CurrentUser'} );
+    $topics->LimitToObject($currclass);
+    $topics->LimitToKids($parentid || 0);
+    $topics->OrderBy( FIELD => 'Name' );
+    return unless $topics->Count;
+    $m->out("<ul>");
+    while ( my $t = $topics->Next ) {
+        $m->out("<li>");
+        $m->comp("/Articles/Elements/ShowTopicLink",
+                 Topic => $t,
+                 Class => $currclass_id,
+             );
+        $ProduceTree->( $t->Id ) if $t->Children->Count;
+        $m->out("</li>");
     }
-}
-
-sub MakeLinks {
-    my ( $topic, $currclass, $currclass_id, $currclass_name, $haschild ) = @_;
-    my $query;
-    my $output;
-
-    if ( ref($topic) eq 'RT::FM::Topic' ) {
-
-        my $topic_info = $topic->Name() || loc("(no name)");
-        $topic_info .= ": " . $topic->Description() if $topic->Description;
-
-        if ($haschild) { # has topics below it
-            $query  = "Topics.html?id=" . $topic->Id . "&class=" . $currclass_id;
-            $output = qq(<li><a href="$query">$topic_info</a>);
-        } else {
-            $output = qq(<li>$topic_info);
-        }
+    $m->out("</ul>");
+};
 
-        my $Articles = RT::FM::ObjectTopicCollection->new( $session{'CurrentUser'} );
-        $Articles->Limit( FIELD => 'ObjectType', VALUE => 'RT::FM::Article' );
-        $Articles->Limit( FIELD => 'Topic',      VALUE => $topic->Id );
-        if ( $Articles->Count ) {
-            my $article_text = " (" . loc( "[quant,_1,article]", $Articles->Count ) . ")";
-            my $query  = "Topics.html?id=" . $topic->Id . "&class=$currclass_id&showall=1";
-            $output .= qq(<a href="$query">$article_text</a>);
-        }
-
-        $output .= "</li>\n";
-
-    } else {
-
-        # This builds a link for the class specified, with no particular topic.
-        $query  = "Topics.html?class=" . $currclass_id;
-        $output = "<li><a href=\"$query\">" . $currclass_name . "</a>";
-        $output .= ": " . $currclass->Description if $currclass->Description;
+my @articles;
+if ($id) {
+    my $Articles = RT::FM::ObjectTopicCollection->new($session{'CurrentUser'});
+    $Articles->Limit(FIELD => 'ObjectType', VALUE => 'RT::FM::Article');
+    $Articles->Limit(FIELD => 'Topic', VALUE => $id);
+    while (my $objtopic = $Articles->Next) {
+        my $a = RT::FM::Article->new($session{'CurrentUser'});
+        $a->Load($objtopic->ObjectId);
+        push @articles, $a;
     }
-
-    return $output;
+} elsif ($class) {
+    my $Articles = RT::FM::ArticleCollection->new($session{'CurrentUser'});
+    my $TopicsAlias = $Articles->Join(
+        TYPE   => 'left',
+        ALIAS1 => 'main',
+        FIELD1 => 'id',
+        TABLE2 => 'FM_ObjectTopics',
+        FIELD2 => 'ObjectId',
+    );
+    $Articles->Limit(
+        LEFTJOIN => $TopicsAlias,
+        FIELD    => 'ObjectType',
+        VALUE    => 'RT::FM::Article',
+    );
+    $Articles->Limit(
+        ALIAS      => $TopicsAlias,
+        FIELD      => 'Topic',
+        OPERATOR   => 'IS',
+        VALUE      => 'NULL',
+        QUOTEVALUE => 0,
+    );
+    $Articles->Limit(
+        FIELD      => 'Class',
+        OPERATOR   => '=',
+        VALUE      => $class,
+    );
+    @articles = @{$Articles->ItemsArrayRef};
 }
-
 </%init>
 
 <%args>

commit a1aea35341acdd2b79e9d2c2b2fc634c3d5e0cd7
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Thu Apr 5 11:41:57 2012 -0400

    Update to support RT 3.8.12's solution to CVE-2011-2084
    
    RT 3.8.12 closed a vulnerability wherein RT::Transaction objects did not
    have ACLs applied correctly.  Support this fix by defining a
    CurrentUserCanSee right on Articles, as they have transactions.

diff --git a/lib/RT/FM/Article_Overlay.pm b/lib/RT/FM/Article_Overlay.pm
index a7cc79d..459079a 100644
--- a/lib/RT/FM/Article_Overlay.pm
+++ b/lib/RT/FM/Article_Overlay.pm
@@ -537,6 +537,17 @@ sub CurrentUserHasRight {
 
 }
 
+=head2 CurrentUserCanSee
+
+Returns true if the current user can see the article, using ShowArticle
+
+=cut
+
+sub CurrentUserCanSee {
+    my $self = shift;
+    return $self->CurrentUserHasRight('ShowArticle');
+}
+
 # }}}
 
 # {{{ _Set

commit 46693d1832c87cf4c53ab611cb725faac5992c65
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Thu Apr 5 11:46:44 2012 -0400

    Move a <&|/l&> call into a loc() call which can actually be extracted

diff --git a/html/Admin/RTFM/Elements/Topics b/html/Admin/RTFM/Elements/Topics
index bc68f1d..4bb3601 100644
--- a/html/Admin/RTFM/Elements/Topics
+++ b/html/Admin/RTFM/Elements/Topics
@@ -104,7 +104,7 @@ $topic
 % }
 % if ($Action) {
 % unless ($Action eq "Move" and grep {$_->getNodeValue->Id == $Modify} $Element->getAllChildren) {
-<li><input type="submit" name="<%$Prefix%>-<%$topic eq "root" ? 0 : $topic->Id%>" value="<&|/l&><%$Action%> here</&>" /></li>
+<li><input type="submit" name="<%$Prefix%>-<%$topic eq "root" ? 0 : $topic->Id%>" value="<% $Action eq 'Move' ? loc('Move here') : loc('Add here') %>" /></li>
 % }
 % }
 </ul>

commit bedf6db4d3f57557aff172d678f20c6feec72f05
Merge: be302f4 46693d1
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Tue Jul 3 13:34:37 2012 -0400

    Merge branch 'security/2.4' into 2.4-trunk


commit 5d07069cab0e34774a26a83ef4f06deb08f7b56e
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Tue Jul 3 13:48:14 2012 -0400

    Backfill 2.4.3 changelog

diff --git a/Changelog b/Changelog
index 97cb610..da0cfbb 100644
--- a/Changelog
+++ b/Changelog
@@ -3,6 +3,20 @@
 FEATURES
 ========
  * Add RTFM_HideArticleSearchOnReplyCreate config var
+ * Auto-submit when an "select an article to include" is chosen
+
+BUG
+===
+ * Limit the width of "select an article to include" drop-down
+ * Postgres ACL script works with usernames requiring quoting
+ * Allow CFs to be globally assigned to Classes
+ * Note that RTFM searches cannot be displayed like RT searches
+ * RT 3.8.8 compatibility when assigning CFs to Classes
+
+PO
+==
+ * Updated Spanish localization
+
 
 2.4.2
 

commit 0ba599360436fac6c2a5e6d40c7ad97db048daef
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Tue Jul 3 13:59:35 2012 -0400

    Update copyright for 2012

diff --git a/html/Admin/Global/CustomFields/RTFM-Class-RTFM-Article.html b/html/Admin/Global/CustomFields/RTFM-Class-RTFM-Article.html
index 402dab1..c25eefc 100644
--- a/html/Admin/Global/CustomFields/RTFM-Class-RTFM-Article.html
+++ b/html/Admin/Global/CustomFields/RTFM-Class-RTFM-Article.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/Elements/ObjectCustomFields, 
     %ARGS, 
     ObjectType => 'RT::FM::Class',
diff --git a/html/Admin/RTFM/Classes/CustomFields.html b/html/Admin/RTFM/Classes/CustomFields.html
index 5b42ee6..c31d318 100644
--- a/html/Admin/RTFM/Classes/CustomFields.html
+++ b/html/Admin/RTFM/Classes/CustomFields.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, id => $Object->id, Title => $title, current_tab => "Admin/RTFM/Classes/CustomFields.html?id=$id" &>
 <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::FM::Class', SubType => 'RT::FM::Article' &>
 <%INIT>
diff --git a/html/Admin/RTFM/Classes/GroupRights.html b/html/Admin/RTFM/Classes/GroupRights.html
index 6d124a9..ba8cbe9 100644
--- a/html/Admin/RTFM/Classes/GroupRights.html
+++ b/html/Admin/RTFM/Classes/GroupRights.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, id => $id, Title => loc('Modify group rights for Class [_1]', $ClassObj->Name) &>
 <& /Elements/ListActions, actions => \@results &>
 
diff --git a/html/Admin/RTFM/Classes/Modify.html b/html/Admin/RTFM/Classes/Modify.html
index e3115f1..2b5466c 100644
--- a/html/Admin/RTFM/Classes/Modify.html
+++ b/html/Admin/RTFM/Classes/Modify.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, id => $ClassObj->id, current_tab =>
 $current_subtab, Title => $title &>
 <& /Elements/ListActions, actions => \@results &>
diff --git a/html/Admin/RTFM/Classes/Topics.html b/html/Admin/RTFM/Classes/Topics.html
index a0e372e..8a59fdd 100644
--- a/html/Admin/RTFM/Classes/Topics.html
+++ b/html/Admin/RTFM/Classes/Topics.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, id => $ClassObj->Id, Title => $title, current_tab => "Admin/RTFM/Classes/Topics.html?id=$id" &>
 
 <& /Admin/RTFM/Elements/Topics, title => $title, RootObj => $ClassObj, %ARGS &>
diff --git a/html/Admin/RTFM/Classes/UserRights.html b/html/Admin/RTFM/Classes/UserRights.html
index 456d0b2..e688dba 100644
--- a/html/Admin/RTFM/Classes/UserRights.html
+++ b/html/Admin/RTFM/Classes/UserRights.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, id => $id , Title => loc('Modify user rights for class [_1]', $ClassObj->Name) &>
 <& /Elements/ListActions, actions => \@results &>
 
diff --git a/html/Admin/RTFM/Classes/index.html b/html/Admin/RTFM/Classes/index.html
index e514f27..6442a6f 100644
--- a/html/Admin/RTFM/Classes/index.html
+++ b/html/Admin/RTFM/Classes/index.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/ClassTabs, current_tab => 'Admin/RTFM/Classes/', current_subtab => 'Admin/RTFM/Classes/', Title => loc("Select a Class") &>
 
 <table>
diff --git a/html/Admin/RTFM/Elements/ClassTabs b/html/Admin/RTFM/Elements/ClassTabs
index 05959e1..3fb07bb 100644
--- a/html/Admin/RTFM/Elements/ClassTabs
+++ b/html/Admin/RTFM/Elements/ClassTabs
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, Title => $Title &>
 <& /Admin/RTFM/Elements/Tabs, 
     subtabs => $tabs, 
diff --git a/html/Admin/RTFM/Elements/GlobalTabs b/html/Admin/RTFM/Elements/GlobalTabs
index e363282..c17990d 100644
--- a/html/Admin/RTFM/Elements/GlobalTabs
+++ b/html/Admin/RTFM/Elements/GlobalTabs
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, Title => $Title &>
 <& /Admin/RTFM/Elements/Tabs, 
     subtabs => $tabs, 
diff --git a/html/Admin/RTFM/Elements/Header b/html/Admin/RTFM/Elements/Header
index e0e583f..1ad7a9b 100644
--- a/html/Admin/RTFM/Elements/Header
+++ b/html/Admin/RTFM/Elements/Header
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 %#<& /Elements/Header, Title => $Title &>
 <%ARGS>
 $Title => undef
diff --git a/html/Admin/RTFM/Elements/Tabs b/html/Admin/RTFM/Elements/Tabs
index 01bbd36..0897fce 100644
--- a/html/Admin/RTFM/Elements/Tabs
+++ b/html/Admin/RTFM/Elements/Tabs
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/Elements/Tabs, 
     subtabs => $tabs, 
     current_tab => 'Admin/RTFM/index.html', 
diff --git a/html/Admin/RTFM/Elements/Topics b/html/Admin/RTFM/Elements/Topics
index 4bb3601..3efefed 100644
--- a/html/Admin/RTFM/Elements/Topics
+++ b/html/Admin/RTFM/Elements/Topics
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/ListActions, actions => \@results &>
 
 <form action="<%$RT::WebPath%><% $m->request_comp->path |n %>" method="post">
diff --git a/html/Admin/RTFM/Global/GroupRights.html b/html/Admin/RTFM/Global/GroupRights.html
index cd56048..c2b35f6 100644
--- a/html/Admin/RTFM/Global/GroupRights.html
+++ b/html/Admin/RTFM/Global/GroupRights.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/GlobalTabs, 
     current_tab => 'Admin/RTFM/Global/GroupRights.html', 
     Title => loc('Modify global group rights') &>  
diff --git a/html/Admin/RTFM/Global/Topics.html b/html/Admin/RTFM/Global/Topics.html
index 96cffa3..8e1010f 100644
--- a/html/Admin/RTFM/Global/Topics.html
+++ b/html/Admin/RTFM/Global/Topics.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/GlobalTabs, current_tab => 'Admin/Global/Topics.html', Title => $title &>
 <& /Admin/RTFM/Elements/Topics, RootObj => $RT::FM::System, title => $title, %ARGS &>
 
diff --git a/html/Admin/RTFM/Global/UserRights.html b/html/Admin/RTFM/Global/UserRights.html
index e25f739..d8131f7 100644
--- a/html/Admin/RTFM/Global/UserRights.html
+++ b/html/Admin/RTFM/Global/UserRights.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/GlobalTabs, 
     current_tab => 'Admin/Global/UserRights.html',
     Title => loc('Modify global user rights') &>
diff --git a/html/Admin/RTFM/Global/index.html b/html/Admin/RTFM/Global/index.html
index f365490..1453dcb 100644
--- a/html/Admin/RTFM/Global/index.html
+++ b/html/Admin/RTFM/Global/index.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Admin/RTFM/Elements/GlobalTabs, 
     current_tab => 'Admin/Global/UserRights.html',
     Title => '' &>
diff --git a/html/Admin/RTFM/index.html b/html/Admin/RTFM/index.html
index c131b09..71e4b48 100644
--- a/html/Admin/RTFM/index.html
+++ b/html/Admin/RTFM/index.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,6 +43,7 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, Title => loc('RTFM Administration') &>
 <& /Admin/RTFM/Elements/Tabs, Title => loc('RTFM Administration') &>
diff --git a/html/Callbacks/RTFM/Admin/Elements/CustomFieldTabs/Default b/html/Callbacks/RTFM/Admin/Elements/CustomFieldTabs/Default
index 6dfc873..b613bad 100644
--- a/html/Callbacks/RTFM/Admin/Elements/CustomFieldTabs/Default
+++ b/html/Callbacks/RTFM/Admin/Elements/CustomFieldTabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%args>
 $id => undef
 $tabs => undef
diff --git a/html/Callbacks/RTFM/Admin/Elements/Tabs/Default b/html/Callbacks/RTFM/Admin/Elements/Tabs/Default
index f723fc1..bdf7f73 100644
--- a/html/Callbacks/RTFM/Admin/Elements/Tabs/Default
+++ b/html/Callbacks/RTFM/Admin/Elements/Tabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%args>
 $id => undef
 $tabs => undef
diff --git a/html/Callbacks/RTFM/Admin/Global/CustomFields/index.html/Default b/html/Callbacks/RTFM/Admin/Global/CustomFields/index.html/Default
index f8a00e5..c416b1f 100644
--- a/html/Callbacks/RTFM/Admin/Global/CustomFields/index.html/Default
+++ b/html/Callbacks/RTFM/Admin/Global/CustomFields/index.html/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%args>
 $tabs => undef
 </%args>
diff --git a/html/Callbacks/RTFM/Admin/index.html/Default b/html/Callbacks/RTFM/Admin/index.html/Default
index f22be8d..913bc95 100644
--- a/html/Callbacks/RTFM/Admin/index.html/Default
+++ b/html/Callbacks/RTFM/Admin/index.html/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%args>
 $id => undef
 $tabs => undef
diff --git a/html/Callbacks/RTFM/Elements/EditLinks/ExtraLinkInstructions b/html/Callbacks/RTFM/Elements/EditLinks/ExtraLinkInstructions
index f6a52fc..7e0e790 100644
--- a/html/Callbacks/RTFM/Elements/EditLinks/ExtraLinkInstructions
+++ b/html/Callbacks/RTFM/Elements/EditLinks/ExtraLinkInstructions
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,5 +43,6 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <br /><&|/l&>You may enter links to RTFM articles as "a:###", where ### represents the number of the article.</&> 
\ No newline at end of file
diff --git a/html/Callbacks/RTFM/Elements/Header/Head b/html/Callbacks/RTFM/Elements/Header/Head
index 1307e47..153a406 100644
--- a/html/Callbacks/RTFM/Elements/Header/Head
+++ b/html/Callbacks/RTFM/Elements/Header/Head
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,5 +43,6 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/webrtfm.css" type="text/css" />
diff --git a/html/Callbacks/RTFM/Elements/MessageBox/Default b/html/Callbacks/RTFM/Elements/MessageBox/Default
index a6247f8..ef051ba 100644
--- a/html/Callbacks/RTFM/Elements/MessageBox/Default
+++ b/html/Callbacks/RTFM/Elements/MessageBox/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%INIT>
 
 my $parent_args = $m->caller_args(-1);
diff --git a/html/Callbacks/RTFM/Elements/Tabs/Default b/html/Callbacks/RTFM/Elements/Tabs/Default
index f7ee7db..f83f860 100644
--- a/html/Callbacks/RTFM/Elements/Tabs/Default
+++ b/html/Callbacks/RTFM/Elements/Tabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%init>
 $toptabs->{'BB-RTFM'} = { title =>loc("RTFM"),
                           path  => "RTFM/index.html" };
diff --git a/html/Callbacks/RTFM/RTIR/Elements/Tabs/Default b/html/Callbacks/RTFM/RTIR/Elements/Tabs/Default
index 7ad8629..2f23066 100644
--- a/html/Callbacks/RTFM/RTIR/Elements/Tabs/Default
+++ b/html/Callbacks/RTFM/RTIR/Elements/Tabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%ARGS>
 $toptabs => {}
 </%ARGS>
diff --git a/html/Callbacks/RTFM/SelfService/Elements/Tabs/Default b/html/Callbacks/RTFM/SelfService/Elements/Tabs/Default
index 9758842..43b8b1e 100644
--- a/html/Callbacks/RTFM/SelfService/Elements/Tabs/Default
+++ b/html/Callbacks/RTFM/SelfService/Elements/Tabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%INIT>
 if ($session{'CurrentUser'}->HasRight( Right => 'ShowArticle',
 				       Object => $RT::FM::System )) {
diff --git a/html/Callbacks/RTFM/Ticket/Create.html/BeforeCreate b/html/Callbacks/RTFM/Ticket/Create.html/BeforeCreate
index e058822..fc62844 100644
--- a/html/Callbacks/RTFM/Ticket/Create.html/BeforeCreate
+++ b/html/Callbacks/RTFM/Ticket/Create.html/BeforeCreate
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%INIT>
 
 return if $checks_failure; # we're already skipping Create
diff --git a/html/Callbacks/RTFM/Ticket/Create.html/BeforeMessageBox b/html/Callbacks/RTFM/Ticket/Create.html/BeforeMessageBox
index ad7bada..41ce413 100644
--- a/html/Callbacks/RTFM/Ticket/Create.html/BeforeMessageBox
+++ b/html/Callbacks/RTFM/Ticket/Create.html/BeforeMessageBox
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ( RT->can('Config') && RT->Config->can('Get') && RT->Config->Get('RTFM_TicketCreate')) {
 <& /RTFM/Elements/BeforeMessageBox, %ARGS &>
 % }
diff --git a/html/Callbacks/RTFM/Ticket/Elements/Tabs/Default b/html/Callbacks/RTFM/Ticket/Elements/Tabs/Default
index 8bbf6a6..6fe4227 100644
--- a/html/Callbacks/RTFM/Ticket/Elements/Tabs/Default
+++ b/html/Callbacks/RTFM/Ticket/Elements/Tabs/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%init>
 if ($Ticket) {
 $actions->{'rtfm-extract-article'} = { title => loc('Extract Article'),
diff --git a/html/Callbacks/RTFM/Ticket/Update.html/BeforeMessageBox b/html/Callbacks/RTFM/Ticket/Update.html/BeforeMessageBox
index 8b7a3de..ee3e7c0 100644
--- a/html/Callbacks/RTFM/Ticket/Update.html/BeforeMessageBox
+++ b/html/Callbacks/RTFM/Ticket/Update.html/BeforeMessageBox
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,5 +43,6 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/BeforeMessageBox, %ARGS &>
diff --git a/html/Callbacks/RTFM/autohandler/Default b/html/Callbacks/RTFM/autohandler/Default
index 37af172..b8a0fa3 100644
--- a/html/Callbacks/RTFM/autohandler/Default
+++ b/html/Callbacks/RTFM/autohandler/Default
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%init>
 use RT::FM;
 use RT::FM::ArticleCollection;
diff --git a/html/Elements/RT__FM__ClassCollection/ColumnMap b/html/Elements/RT__FM__ClassCollection/ColumnMap
index ba300a1..81c588c 100644
--- a/html/Elements/RT__FM__ClassCollection/ColumnMap
+++ b/html/Elements/RT__FM__ClassCollection/ColumnMap
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%ARGS>
 $Name
 $Attr => undef
diff --git a/html/NoAuth/webrtfm.css b/html/NoAuth/webrtfm.css
index 9ff9b19..219bb45 100644
--- a/html/NoAuth/webrtfm.css
+++ b/html/NoAuth/webrtfm.css
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 #cfs .hidden { display: none; }
 
 #cfs .de-emphasized td { font-weight: lighter; color: #999; font-size:  9pt; }
diff --git a/html/RTFM/Article/Delete.html b/html/RTFM/Article/Delete.html
index dac7cb4..ac41c13 100644
--- a/html/RTFM/Article/Delete.html
+++ b/html/RTFM/Article/Delete.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ($ARGS{'Delete'}) {
 <& /RTFM/Article/Elements/Tabs, Title => $title &>
 
diff --git a/html/RTFM/Article/Display.html b/html/RTFM/Article/Display.html
index 268ba57..bb0f6ee 100644
--- a/html/RTFM/Article/Display.html
+++ b/html/RTFM/Article/Display.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Article/Elements/Tabs, 
     id => $id, 
     Title => $title, 
diff --git a/html/RTFM/Article/Edit.html b/html/RTFM/Article/Edit.html
index 531c849..9bedcd0 100644
--- a/html/RTFM/Article/Edit.html
+++ b/html/RTFM/Article/Edit.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ($id && $id ne 'new') {
 <& /RTFM/Article/Elements/Tabs, 
     Article => $ArticleObj, 
diff --git a/html/RTFM/Article/Elements/EditBasics b/html/RTFM/Article/Elements/EditBasics
index 3e75ab1..943b00d 100644
--- a/html/RTFM/Article/Elements/EditBasics
+++ b/html/RTFM/Article/Elements/EditBasics
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <tr>
 <td class="label"><&|/l&>Name</&></td>
 <td><input name="Name" value="<%($ARGS{'id'} eq 'new' ? '' : $ArticleObj->Name) || $ARGS{'Name'} || ''|h%>" size="50" /></td>
diff --git a/html/RTFM/Article/Elements/EditCustomFields b/html/RTFM/Article/Elements/EditCustomFields
index dd63895..7c2e5a4 100644
--- a/html/RTFM/Article/Elements/EditCustomFields
+++ b/html/RTFM/Article/Elements/EditCustomFields
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % while (my $CustomField = $CustomFields->Next()) {
 <tr>
     <td class="labeltop"><b><%$CustomField->Name%></b><br /><i><%$CustomField->FriendlyType%></i></td>
diff --git a/html/RTFM/Article/Elements/EditLinks b/html/RTFM/Article/Elements/EditLinks
index 4301a03..237e425 100644
--- a/html/RTFM/Article/Elements/EditLinks
+++ b/html/RTFM/Article/Elements/EditLinks
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <tr>
 <td class="label"></td>
 <td class="value"><i><&|/l&>Enter articles, tickets, or other URLs related to this article.</&>
diff --git a/html/RTFM/Article/Elements/EditTopics b/html/RTFM/Article/Elements/EditTopics
index 58143b8..7f0cc52 100644
--- a/html/RTFM/Article/Elements/EditTopics
+++ b/html/RTFM/Article/Elements/EditTopics
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <input type="hidden" name="EditTopics" value="1" />
 <select multiple size="10" name="Topics">
 % if (@Classes) {
diff --git a/html/RTFM/Article/Elements/LinkEntryInstructions b/html/RTFM/Article/Elements/LinkEntryInstructions
index 6a0e4db..1357be4 100644
--- a/html/RTFM/Article/Elements/LinkEntryInstructions
+++ b/html/RTFM/Article/Elements/LinkEntryInstructions
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,6 +43,7 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <&|/l&>Type <b>a:</b> before article numbers and <b>t:</b> before ticket numbers.</&>
 <&|/l&>Separate multiple entries with spaces.</&>
diff --git a/html/RTFM/Article/Elements/Preformatted b/html/RTFM/Article/Elements/Preformatted
index 2d9d7c5..c780e44 100644
--- a/html/RTFM/Article/Elements/Preformatted
+++ b/html/RTFM/Article/Elements/Preformatted
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ($include{Name}) {
 #<%$Article->Id%>: <%$Article->Name || loc('(no name)')%>
 <%'-' x length("#".$Article->Id.": ".($Article->Name || loc('(no name)'))) %>
diff --git a/html/RTFM/Article/Elements/SearchByCustomField b/html/RTFM/Article/Elements/SearchByCustomField
index 1fa0ee4..d7c935f 100644
--- a/html/RTFM/Article/Elements/SearchByCustomField
+++ b/html/RTFM/Article/Elements/SearchByCustomField
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 %# if the custom field is a select, enumerate the options
 % if ($Field->Type =~ /^Select/) {
 % my $CustomFieldValues = $Field->ValuesObj();
diff --git a/html/RTFM/Article/Elements/SelectSavedSearches b/html/RTFM/Article/Elements/SelectSavedSearches
index 8bafb14..72f49ac 100644
--- a/html/RTFM/Article/Elements/SelectSavedSearches
+++ b/html/RTFM/Article/Elements/SelectSavedSearches
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <select name="<%$Name%>">
 % foreach my $privacy (reverse sort keys %privacies) {
 %     my $searches = RT::SavedSearches->new($session{'CurrentUser'});
diff --git a/html/RTFM/Article/Elements/SelectSearchPrivacy b/html/RTFM/Article/Elements/SelectSearchPrivacy
index 4e44408..a284da3 100755
--- a/html/RTFM/Article/Elements/SelectSearchPrivacy
+++ b/html/RTFM/Article/Elements/SelectSearchPrivacy
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <select name="<%$Name%>">
 <option value="RT::User-<% $user->Id %>" <% $Default eq 'RT::User-'.$user->Id ? 'selected' : '' %>>My searches</option>
 % while (my $group = $groups->Next) {
diff --git a/html/RTFM/Article/Elements/ShowHistory b/html/RTFM/Article/Elements/ShowHistory
index dbacc49..3713786 100644
--- a/html/RTFM/Article/Elements/ShowHistory
+++ b/html/RTFM/Article/Elements/ShowHistory
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <table width="100%" cellspacing="0" cellpadding="2">
 % my $i;
 % while (my $transaction = $transactions->Next) {
diff --git a/html/RTFM/Article/Elements/ShowLinks b/html/RTFM/Article/Elements/ShowLinks
index 66446a5..ed4a256 100644
--- a/html/RTFM/Article/Elements/ShowLinks
+++ b/html/RTFM/Article/Elements/ShowLinks
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <span class="label"><&|/l&>Refers to</&></span>:<br />
 <ul class="value">
 % my $refersto = $article->RefersTo;
diff --git a/html/RTFM/Article/Elements/ShowSavedSearches b/html/RTFM/Article/Elements/ShowSavedSearches
index 98a0c6d..ed99da0 100644
--- a/html/RTFM/Article/Elements/ShowSavedSearches
+++ b/html/RTFM/Article/Elements/ShowSavedSearches
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/TitleBoxStart, title => loc('Saved searches') &>
 %# Keep track of what our current search ID is.
 <input type="hidden" name="CurrentSearch" value="<% $CurrentSearch ? $CurrentSearch : 'new' %>">
diff --git a/html/RTFM/Article/Elements/ShowSearchCriteria b/html/RTFM/Article/Elements/ShowSearchCriteria
index f20e8be..32b1b49 100644
--- a/html/RTFM/Article/Elements/ShowSearchCriteria
+++ b/html/RTFM/Article/Elements/ShowSearchCriteria
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ($ARGS{'HideOptions'}) {
 <& /Elements/TitleBoxStart, title => loc('Advanced search'), class => "rolled-up", bodyclass => "hidden" &>
 % } else {
diff --git a/html/RTFM/Article/Elements/ShowSearchResults b/html/RTFM/Article/Elements/ShowSearchResults
index b7f1674..ca42491 100644
--- a/html/RTFM/Article/Elements/ShowSearchResults
+++ b/html/RTFM/Article/Elements/ShowSearchResults
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % # THIS IS A HORRIBLE HACK TO SEE IF WE TRIED TO SEARCH
 % # IT CAN GO AWAY WHEN SEARCHBUILDER'S _isLimited IS 
 % # PROMOTED TO A PUBLIC API XXX TODO
diff --git a/html/RTFM/Article/Elements/ShowTopics b/html/RTFM/Article/Elements/ShowTopics
index e72808a..c71e235 100644
--- a/html/RTFM/Article/Elements/ShowTopics
+++ b/html/RTFM/Article/Elements/ShowTopics
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % my $topics = new RT::FM::ObjectTopicCollection($session{'CurrentUser'});
 % $topics->LimitToObject($article);
 % my @topics;
diff --git a/html/RTFM/Article/Elements/Tabs b/html/RTFM/Article/Elements/Tabs
index 9ac600c..a239f12 100644
--- a/html/RTFM/Article/Elements/Tabs
+++ b/html/RTFM/Article/Elements/Tabs
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, tabs => $tabs, subtabs => $subtabs, current_toptab => 'RTFM/Article/Search.html', current_tab => $current_tab, current_subtab => $current_subtab, Title => $Title&>
   
 <%INIT>
diff --git a/html/RTFM/Article/ExtractFromTicket.html b/html/RTFM/Article/ExtractFromTicket.html
index a959f32..e48727c 100644
--- a/html/RTFM/Article/ExtractFromTicket.html
+++ b/html/RTFM/Article/ExtractFromTicket.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, Title => loc('Extract article from ticket #[_1] into class [_2]',$Ticket, $ClassObj->Name) &> 
 <form action="Edit.html" method="post">
 <input type="hidden" name="Class" value="<%$ARGS{'Class'}%>" />
diff --git a/html/RTFM/Article/ExtractIntoClass.html b/html/RTFM/Article/ExtractIntoClass.html
index af23024..acd6208 100644
--- a/html/RTFM/Article/ExtractIntoClass.html
+++ b/html/RTFM/Article/ExtractIntoClass.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, Title => loc('Extract a new article from ticket #[_1]',$Ticket) &>                  
 
 
diff --git a/html/RTFM/Article/ExtractIntoTopic.html b/html/RTFM/Article/ExtractIntoTopic.html
index 0f3e1b2..846eeda 100644
--- a/html/RTFM/Article/ExtractIntoTopic.html
+++ b/html/RTFM/Article/ExtractIntoTopic.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, Title => loc('Extract a new article from ticket #[_1]',$Ticket) &>
 
 
diff --git a/html/RTFM/Article/History.html b/html/RTFM/Article/History.html
index ee95417..30a4af3 100644
--- a/html/RTFM/Article/History.html
+++ b/html/RTFM/Article/History.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Article/Elements/Tabs, id => $id, Title => $title, current_subtab => 'RTFM/Article/History.html?id='.$id &>
 <& Elements/ShowHistory, id => $id &>  
 <%init>
diff --git a/html/RTFM/Article/PreCreate.html b/html/RTFM/Article/PreCreate.html
index 3391eeb..24c9edf 100644
--- a/html/RTFM/Article/PreCreate.html
+++ b/html/RTFM/Article/PreCreate.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Article/Elements/Tabs,
     current_tab => "RTFM/Article/PreCreate.html",
     Title => loc('Create an article in class...'),
diff --git a/html/RTFM/Article/Search.html b/html/RTFM/Article/Search.html
index 6640aa4..76c2c37 100644
--- a/html/RTFM/Article/Search.html
+++ b/html/RTFM/Article/Search.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Article/Elements/Tabs, current_tab => "RTFM/Article/Search.html", Title => loc("Search for articles") &>
 
 % unless ( keys %ARGS ) {
diff --git a/html/RTFM/Elements/BeforeMessageBox b/html/RTFM/Elements/BeforeMessageBox
index 8e9a06e..c47cbdb 100644
--- a/html/RTFM/Elements/BeforeMessageBox
+++ b/html/RTFM/Elements/BeforeMessageBox
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ( $ARGS{id} && $ARGS{id} ne 'new' ) {
 <input type="hidden" name="<%$ARGS{'id'}%>-RefersTo" value="<% join(' ',grep {$_} sort keys %uri) %>" />
 % }
diff --git a/html/RTFM/Elements/CreateArticle b/html/RTFM/Elements/CreateArticle
index 60d2fc5..bf9a214 100644
--- a/html/RTFM/Elements/CreateArticle
+++ b/html/RTFM/Elements/CreateArticle
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/TitleBoxStart, title => loc('Create an article') &>
 <ul>
 % while (my $Class = $Classes->Next) {
diff --git a/html/RTFM/Elements/Error b/html/RTFM/Elements/Error
index 6df3960..ffd5037 100644
--- a/html/RTFM/Elements/Error
+++ b/html/RTFM/Elements/Error
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs &>
 <& /Elements/TitleBoxStart, class=> "error",  title => $Title &>
 <%$Why%>
diff --git a/html/RTFM/Elements/GotoArticle b/html/RTFM/Elements/GotoArticle
index 8516ad3..02e6987 100644
--- a/html/RTFM/Elements/GotoArticle
+++ b/html/RTFM/Elements/GotoArticle
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <form ACTION="<%$RT::WebPath%>/RTFM/Article/Search.html">
 <input type="hidden" name="HideOptions" value="1" />
 <input size="12" name="q" accesskey="0" />
diff --git a/html/RTFM/Elements/Header b/html/RTFM/Elements/Header
index 482f188..94b6c9c 100644
--- a/html/RTFM/Elements/Header
+++ b/html/RTFM/Elements/Header
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,5 +43,6 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, %ARGS &>
diff --git a/html/RTFM/Elements/NewestArticles b/html/RTFM/Elements/NewestArticles
index d2216c0..6b72ed2 100644
--- a/html/RTFM/Elements/NewestArticles
+++ b/html/RTFM/Elements/NewestArticles
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/TitleBoxStart, title => loc("[_1] newest articles", $rows), bodyclass=> '' &>
 <table border="0" cellspacing="0" cellpadding="1" width="100%">
 <tr>
diff --git a/html/RTFM/Elements/QuickSearch b/html/RTFM/Elements/QuickSearch
index 879ea79..3e0fa41 100644
--- a/html/RTFM/Elements/QuickSearch
+++ b/html/RTFM/Elements/QuickSearch
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/TitleBoxStart, title => loc('Quick search') &>
 <ul>
 % while (my $class = $classes->Next) {
diff --git a/html/RTFM/Elements/SelectClass b/html/RTFM/Elements/SelectClass
index dad9c9b..e0d25f3 100644
--- a/html/RTFM/Elements/SelectClass
+++ b/html/RTFM/Elements/SelectClass
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % if ($Lite) {
 <input name="<%$Name%>" size="25" default="<%$d->Name%>" />
 % } else {
diff --git a/html/RTFM/Elements/ShowTopic b/html/RTFM/Elements/ShowTopic
index b19ebde..f74e03f 100644
--- a/html/RTFM/Elements/ShowTopic
+++ b/html/RTFM/Elements/ShowTopic
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 % for (@path) {
 %# this isn't always a class, it can be the system object
 % my $class_id = ($_->ObjectType eq 'RT::FM::Class' ? $_->ObjectId : 0 );
diff --git a/html/RTFM/Elements/Tabs b/html/RTFM/Elements/Tabs
index a5e0d46..eb5e074 100644
--- a/html/RTFM/Elements/Tabs
+++ b/html/RTFM/Elements/Tabs
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Header, Title => $Title &>
 <& /Elements/PageLayout,
     current_toptab => 'RTFM/index.html',
diff --git a/html/RTFM/Elements/UpdatedArticles b/html/RTFM/Elements/UpdatedArticles
index 1f77c93..4b39937 100644
--- a/html/RTFM/Elements/UpdatedArticles
+++ b/html/RTFM/Elements/UpdatedArticles
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /Elements/TitleBoxStart, title => loc("[_1] most recently updated articles", $rows), bodyclass=> '' &>
 <table border="0" cellspacing="0" cellpadding="1" width="100%">
 <tr>
diff --git a/html/RTFM/Topics.html b/html/RTFM/Topics.html
index 8f87a5f..e11b38d 100644
--- a/html/RTFM/Topics.html
+++ b/html/RTFM/Topics.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, current_toptab => "RTFM/Topics.html", Title => loc('Browse by topic'), class => $class, topic => $id &>
 
 <a href="Topics.html"><&|/l&>All topics</&></a>
diff --git a/html/RTFM/index.html b/html/RTFM/index.html
index 8558e4d..ed011a5 100644
--- a/html/RTFM/index.html
+++ b/html/RTFM/index.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /RTFM/Elements/Tabs, current_toptab => "RTFM/index.html", Title => loc('Overview') &>
 <table width="100%">
 <tr>
diff --git a/html/Search/Elements/Article b/html/Search/Elements/Article
index 4ef40fe..fdf110c 100644
--- a/html/Search/Elements/Article
+++ b/html/Search/Elements/Article
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <&|/l&>RTFM Article searches cannot be displayed inline, you can view the results</&>
 <a href="<%$RT::WebPath%>/RTFM/Article/Search.html<%$QueryString%>"><&|/l&>here</&></a>
 <%INIT>
diff --git a/html/SelfService/Article/Display.html b/html/SelfService/Article/Display.html
index 43220b0..17e2840 100644
--- a/html/SelfService/Article/Display.html
+++ b/html/SelfService/Article/Display.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /SelfService/Elements/Header, Title => loc('Display Article ' . $ARGS{id} ) &>
 <span class="label"><%$article->Name || loc("(no name)")%></span><br />
 <em><span class="value"><%$article->Summary%></span></em>
diff --git a/html/SelfService/Article/Search.html b/html/SelfService/Article/Search.html
index c3b4734..ded536d 100644
--- a/html/SelfService/Article/Search.html
+++ b/html/SelfService/Article/Search.html
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <& /SelfService/Elements/Header, Title => loc('Search Articles') &>
 
 <table>
diff --git a/html/SelfService/Article/autohandler b/html/SelfService/Article/autohandler
index c5ba65e..1c97b43 100755
--- a/html/SelfService/Article/autohandler
+++ b/html/SelfService/Article/autohandler
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <%INIT>
 
 if ( $session{'CurrentUser'}->HasRight( Right => 'ShowArticle',
diff --git a/html/SelfService/Elements/SearchArticle b/html/SelfService/Elements/SearchArticle
index 933890d..c371efb 100755
--- a/html/SelfService/Elements/SearchArticle
+++ b/html/SelfService/Elements/SearchArticle
@@ -2,7 +2,7 @@
 %#
 %# COPYRIGHT:
 %#
-%# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+%# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 %#                                          <sales at bestpractical.com>
 %#
 %# (Except where explicitly superseded by other copyright notices)
@@ -43,7 +43,8 @@
 %# royalty-free, perpetual, license to use, copy, create derivative
 %# works based on those contributions, and sublicense and distribute
 %# those contributions and any derivatives thereof.
-%#%# END BPS TAGGED BLOCK }}}
+%#
+%# END BPS TAGGED BLOCK }}}
 <form action="<%$RT::WebPath%>/SelfService/Article/Search.html" id="ArticleSearch">
 <input type="submit" class="button" value="<&|/l&>Search Articles</&>" /> 
 <input size="15" name="RTFM_Content" />
diff --git a/lib/RT/FM.pm b/lib/RT/FM.pm
index 4b53476..bd50a63 100644
--- a/lib/RT/FM.pm
+++ b/lib/RT/FM.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Article.pm b/lib/RT/FM/Article.pm
index 345358b..0d69617 100644
--- a/lib/RT/FM/Article.pm
+++ b/lib/RT/FM/Article.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ArticleCollection.pm b/lib/RT/FM/ArticleCollection.pm
index 1685342..4384f77 100644
--- a/lib/RT/FM/ArticleCollection.pm
+++ b/lib/RT/FM/ArticleCollection.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ArticleCollection_Overlay.pm b/lib/RT/FM/ArticleCollection_Overlay.pm
index 27805f2..8b7d132 100644
--- a/lib/RT/FM/ArticleCollection_Overlay.pm
+++ b/lib/RT/FM/ArticleCollection_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Article_Overlay.pm b/lib/RT/FM/Article_Overlay.pm
index 459079a..316850a 100644
--- a/lib/RT/FM/Article_Overlay.pm
+++ b/lib/RT/FM/Article_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Class.pm b/lib/RT/FM/Class.pm
index e0af88a..f29c8d2 100644
--- a/lib/RT/FM/Class.pm
+++ b/lib/RT/FM/Class.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ClassCollection.pm b/lib/RT/FM/ClassCollection.pm
index 2f34057..e88140e 100644
--- a/lib/RT/FM/ClassCollection.pm
+++ b/lib/RT/FM/ClassCollection.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ClassCollection_Overlay.pm b/lib/RT/FM/ClassCollection_Overlay.pm
index f003c71..8741d82 100644
--- a/lib/RT/FM/ClassCollection_Overlay.pm
+++ b/lib/RT/FM/ClassCollection_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Class_Overlay.pm b/lib/RT/FM/Class_Overlay.pm
index 0ddafe5..6bebe01 100644
--- a/lib/RT/FM/Class_Overlay.pm
+++ b/lib/RT/FM/Class_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ObjectTopic.pm b/lib/RT/FM/ObjectTopic.pm
index 1b72af8..4af7497 100644
--- a/lib/RT/FM/ObjectTopic.pm
+++ b/lib/RT/FM/ObjectTopic.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ObjectTopicCollection.pm b/lib/RT/FM/ObjectTopicCollection.pm
index ec39814..68ccb15 100644
--- a/lib/RT/FM/ObjectTopicCollection.pm
+++ b/lib/RT/FM/ObjectTopicCollection.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/ObjectTopicCollection_Overlay.pm b/lib/RT/FM/ObjectTopicCollection_Overlay.pm
index 5759ebf..2e67d92 100644
--- a/lib/RT/FM/ObjectTopicCollection_Overlay.pm
+++ b/lib/RT/FM/ObjectTopicCollection_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Record.pm b/lib/RT/FM/Record.pm
index 0beb983..ec7c257 100644
--- a/lib/RT/FM/Record.pm
+++ b/lib/RT/FM/Record.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/SearchBuilder.pm b/lib/RT/FM/SearchBuilder.pm
index 240ae63..fc05edd 100644
--- a/lib/RT/FM/SearchBuilder.pm
+++ b/lib/RT/FM/SearchBuilder.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/System.pm b/lib/RT/FM/System.pm
index ae674b0..bd2952b 100644
--- a/lib/RT/FM/System.pm
+++ b/lib/RT/FM/System.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Topic.pm b/lib/RT/FM/Topic.pm
index 2e6b885..34c55fe 100644
--- a/lib/RT/FM/Topic.pm
+++ b/lib/RT/FM/Topic.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/TopicCollection.pm b/lib/RT/FM/TopicCollection.pm
index 3b9a696..ceed825 100644
--- a/lib/RT/FM/TopicCollection.pm
+++ b/lib/RT/FM/TopicCollection.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/TopicCollection_Overlay.pm b/lib/RT/FM/TopicCollection_Overlay.pm
index 23d5961..73191b2 100644
--- a/lib/RT/FM/TopicCollection_Overlay.pm
+++ b/lib/RT/FM/TopicCollection_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/FM/Topic_Overlay.pm b/lib/RT/FM/Topic_Overlay.pm
index b80bd9c..babd89a 100644
--- a/lib/RT/FM/Topic_Overlay.pm
+++ b/lib/RT/FM/Topic_Overlay.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/URI/a.pm b/lib/RT/URI/a.pm
index 9f0420d..07d1fb1 100644
--- a/lib/RT/URI/a.pm
+++ b/lib/RT/URI/a.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/lib/RT/URI/fsck_com_rtfm.pm b/lib/RT/URI/fsck_com_rtfm.pm
index bee7ee7..d06c400 100644
--- a/lib/RT/URI/fsck_com_rtfm.pm
+++ b/lib/RT/URI/fsck_com_rtfm.pm
@@ -2,7 +2,7 @@
 #
 # COPYRIGHT:
 #
-# This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+# This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
 #                                          <sales at bestpractical.com>
 #
 # (Except where explicitly superseded by other copyright notices)
diff --git a/tools/license_tag b/tools/license_tag
index d552ed6..c3f18a3 100644
--- a/tools/license_tag
+++ b/tools/license_tag
@@ -52,7 +52,7 @@ my $LICENSE  = <<'EOL';
 
 COPYRIGHT:
 
-This software is Copyright (c) 1996-2010 Best Practical Solutions, LLC
+This software is Copyright (c) 1996-2012 Best Practical Solutions, LLC
                                          <sales at bestpractical.com>
 
 (Except where explicitly superseded by other copyright notices)

commit 59acdecf449a36cd32efd049d00d4f6c4bf0cb62
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Tue Jul 3 13:56:30 2012 -0400

    Version bump to 2.4.4

diff --git a/Changelog b/Changelog
index da0cfbb..015f53e 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,18 @@
+2.4.4
+
+SECURITY
+========
+ * Close several XSS vulnerabilities in topic administration page.  This
+   resolves CVE-2012-2768.
+
+DOC
+===
+ * Clarify that the only version incompatibility is 3.8.0; 3.8.x for
+   values of x != 0 is fine.
+ * Note incompatibility with RT 4 and above, which already include RTFM
+   functionality as "Articles"
+
+
 2.4.3
 
 FEATURES
diff --git a/META.yml b/META.yml
index f7c1795..5af00c3 100644
--- a/META.yml
+++ b/META.yml
@@ -27,4 +27,4 @@ requires:
   perl: 5.8.3
 resources:
   license: http://opensource.org/licenses/gpl-license.php
-version: 2.4.HEAD
+version: 2.4.4
diff --git a/lib/RT/FM.pm b/lib/RT/FM.pm
index bd50a63..2c6c56b 100644
--- a/lib/RT/FM.pm
+++ b/lib/RT/FM.pm
@@ -51,7 +51,7 @@ use 5.008003;
 use strict;
 use warnings;
 
-our $VERSION = '2.4.HEAD';
+our $VERSION = '2.4.4';
 
 # Create a system object for RTFM
 use RT::FM::System;

commit 73f1883da15efbcf0d6333003dc6356ff06c4454
Merge: 5d07069 59acdec
Author: Alex Vandiver <alexmv at bestpractical.com>
Date:   Fri Jul 27 17:11:25 2012 -0400

    Merge branch '2.4.4-releng' into 2.4-trunk
    
    Revert 2.4.4 version bump to 2.4.HEAD


-----------------------------------------------------------------------


More information about the Rt-commit mailing list