[Rt-commit] rt branch, 4.2/menus, created. rt-4.1.8-163-g36acf79

Thomas Sibley trs at bestpractical.com
Thu May 16 21:13:44 EDT 2013


The branch, 4.2/menus has been created
        at  36acf7932f959779a4b12b057b6c5eeab7db15b2 (commit)

- Log -----------------------------------------------------------------
commit ac86c0df0bd89ff4e8656b83733c24a4ca899c41
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 10:58:53 2013 -0700

    Rename the Configuration menu to Admin and pull it up out of Tools
    
    The admin configuration pages are unlike anything else in the Tools
    menu, and the top-level menu will only show up for folks with
    ShowConfigTab anyway.  Slightly flattening the menus makes them more
    navigable.
    
    The ShowConfigTab right keeps its name since there is no compelling
    reason to change it.  Internal consistency is a weak argument since it
    is unlikely to confuse us and has had a known meaning for quite some
    time.  The benefit of keeping it is users who come across references to
    ShowConfigTab in rt-users, the wiki, etc.  When they search for the
    right in the UI, they can still find it.  The user-visible description
    of the right _is_ updated to reflect the current menu name to provide
    confirmation that it is the correct right.

diff --git a/lib/RT/System.pm b/lib/RT/System.pm
index 7bbca13..9924562 100644
--- a/lib/RT/System.pm
+++ b/lib/RT/System.pm
@@ -84,7 +84,7 @@ our $RIGHTS = {
     SuperUser              => 'Do anything and everything',           # loc_pair
     AdminUsers     => 'Create, modify and delete users',              # loc_pair
     ModifySelf     => "Modify one's own RT account",                  # loc_pair
-    ShowConfigTab => "Show Configuration tab",     # loc_pair
+    ShowConfigTab => "Show Admin menu",     # loc_pair
     ShowApprovalsTab => "Show Approvals tab",     # loc_pair
     ShowGlobalTemplates => "Show global templates",     # loc_pair
     LoadSavedSearch => "Allow loading of saved searches",     # loc_pair
diff --git a/share/html/Admin/Articles/index.html b/share/html/Admin/Articles/index.html
index b2fca6f..bfe434c 100644
--- a/share/html/Admin/Articles/index.html
+++ b/share/html/Admin/Articles/index.html
@@ -47,4 +47,4 @@
 %# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, Title => loc('Article Administration') &>
 <& /Elements/Tabs &>
-<& /Elements/ListMenu, menu => Menu()->child('tools')->child('config')->child('articles') &>
+<& /Elements/ListMenu, menu => Menu()->child('admin')->child('articles') &>
diff --git a/share/html/Admin/Global/index.html b/share/html/Admin/Global/index.html
index e382203..478fb59 100644
--- a/share/html/Admin/Global/index.html
+++ b/share/html/Admin/Global/index.html
@@ -47,4 +47,4 @@
 %# END BPS TAGGED BLOCK }}}
 <& /Admin/Elements/Header, Title => loc('Admin/Global configuration') &>
 <& /Elements/Tabs &>
-<& /Elements/ListMenu, menu => Menu()->child('tools')->child('config')->child('global') &>
+<& /Elements/ListMenu, menu => Menu()->child('admin')->child('global') &>
diff --git a/share/html/Admin/Tools/index.html b/share/html/Admin/Tools/index.html
index c14847e..d3532bc 100644
--- a/share/html/Admin/Tools/index.html
+++ b/share/html/Admin/Tools/index.html
@@ -47,4 +47,4 @@
 %# END BPS TAGGED BLOCK }}}
 <& /Admin/Elements/Header, Title => loc('System Tools') &>
 <& /Elements/Tabs &>
-<& /Elements/ListMenu, menu => Menu()->child('tools')->child('config')->child('tools') &>
+<& /Elements/ListMenu, menu => Menu()->child('admin')->child('tools') &>
diff --git a/share/html/Admin/index.html b/share/html/Admin/index.html
index 09d0908..20e165d 100644
--- a/share/html/Admin/index.html
+++ b/share/html/Admin/index.html
@@ -47,7 +47,7 @@
 %# END BPS TAGGED BLOCK }}}
 <& /Admin/Elements/Header, Title => loc('RT Administration') &>
 <& /Elements/Tabs &>
-<& /Elements/ListMenu, menu => Menu()->child('tools')->child('config')  &>
+<& /Elements/ListMenu, menu => Menu()->child('admin')  &>
 % if (RT->Config->Get('ShowRTPortal')) {
 <& /Admin/Elements/Portal &>
 % }
diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index eb84dde..542b38d 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -61,7 +61,7 @@ my $query_string = sub {
 
 my $build_admin_menu = sub {
     my $top = shift;
-    my $admin = $top->child( config => title => loc('Configuration'), path => '/Admin/', sort_order => 99 );
+    my $admin = $top->child( admin => title => loc('Admin'), path => '/Admin/' );
     if ( $session{'CurrentUser'}->HasRight( Object => RT->System, Right => 'AdminUsers' ) ) {
         my $users = $admin->child( users =>
             title       => loc('Users'),
@@ -532,7 +532,7 @@ my $build_main_nav = sub {
 
     if ( $session{'CurrentUser'}->HasRight( Right => 'ShowConfigTab', Object => RT->System ) )
     {
-        $build_admin_menu->($tools);
+        $build_admin_menu->(Menu());
     }
 
     my $username = '<span class="current-user">'

commit c0717a6928af78a798933eccfdbf2f43ad0b6601
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 12:10:50 2013 -0700

    Pull the Articles menu up out of Tools
    
    It is also unlike any of the other items in Tools and deserves more
    prominence.  For instances not using articles, the menu may be hidden by
    revoking the new ShowArticlesMenu right.

diff --git a/docs/UPGRADING-4.2 b/docs/UPGRADING-4.2
index 7d5c0cb..b031f18 100644
--- a/docs/UPGRADING-4.2
+++ b/docs/UPGRADING-4.2
@@ -88,3 +88,10 @@ UPGRADING FROM RT 4.0.0 and greater
 
   This command deletes records from Transactions table. This script can only fix
   TimeWorked mismatch, but not TimeLeft or TimeEstimated.
+
+* The Articles menu is now a top-level menu item and display is controlled by
+  the right ShowArticlesMenu.  This right is only grantable globally to groups
+  or users.  During the upgrade, the new right will be automatically granted to
+  Privileged users so that the menu doesn't disappear for anyone previously
+  using it.  You may wish to revoke the right from Privileged and grant it
+  more selectively.
diff --git a/etc/upgrade/4.1.9/content b/etc/upgrade/4.1.9/content
new file mode 100644
index 0000000..1f370a2
--- /dev/null
+++ b/etc/upgrade/4.1.9/content
@@ -0,0 +1,10 @@
+use strict;
+use warnings;
+
+our @ACL = (
+    Right       => 'ShowArticlesMenu',
+    GroupDomain => 'SystemInternal',
+    GroupType   => 'Privileged',
+);
+
+1;
diff --git a/lib/RT/System.pm b/lib/RT/System.pm
index 9924562..7b0a4cb 100644
--- a/lib/RT/System.pm
+++ b/lib/RT/System.pm
@@ -84,6 +84,7 @@ our $RIGHTS = {
     SuperUser              => 'Do anything and everything',           # loc_pair
     AdminUsers     => 'Create, modify and delete users',              # loc_pair
     ModifySelf     => "Modify one's own RT account",                  # loc_pair
+    ShowArticlesMenu => "Show Articles menu",     # loc_pair
     ShowConfigTab => "Show Admin menu",     # loc_pair
     ShowApprovalsTab => "Show Approvals tab",     # loc_pair
     ShowGlobalTemplates => "Show global templates",     # loc_pair
@@ -96,6 +97,7 @@ our $RIGHT_CATEGORIES = {
     SuperUser              => 'Admin',
     AdminUsers             => 'Admin',
     ModifySelf             => 'Staff',
+    ShowArticlesMenu       => 'Staff',
     ShowConfigTab          => 'Admin',
     ShowApprovalsTab       => 'Admin',
     ShowGlobalTemplates    => 'Staff',
diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index 542b38d..7a05e4f 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -496,11 +496,14 @@ my $build_main_nav = sub {
 
     $search->child( users => title => loc('Users'),   path => "/User/Search.html" );
 
+    if ($session{CurrentUser}->HasRight( Right => 'ShowArticlesMenu', Object => RT->System )) {
+        my $articles = Menu->child( articles => title => loc('Articles'), path => "/Articles/index.html");
+        $articles->child( articles => title => loc('Overview'), path => "/Articles/index.html" );
+        $articles->child( topics   => title => loc('Topics'),   path => "/Articles/Topics.html" );
+        $articles->child( search   => title => loc('Search'),   path => "/Articles/Article/Search.html" );
+    }
 
     my $tools = Menu->child( tools => title => loc('Tools'), path => '/Tools/index.html' );
-    my $articles = $tools->child( articles => title => loc('Articles'), path => "/Articles/index.html");
-    $articles->child( articles => title => loc('Overview'), path => "/Articles/index.html" );
-    $articles->child( topics   => title => loc('Topics'),   path => "/Articles/Topics.html" );
 
     $tools->child( my_day =>
         title       => loc('My Day'),

commit 3dd463a7dd366d30408bc8160240e47b0211d0ed
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 12:12:38 2013 -0700

    Link the top-level Search menu to the ticket simple search
    
    A functional and reasonable default for a common action like searching
    is more useful than a sparse page of duplicate links.
    
    This change increases the visibility of the full simple search page,
    which, anecdotally, often seems overlooked.  A quick read of the simple
    search explanation immensely increases the usefulness of the
    ever-present search box.

diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index 7a05e4f..ef1371b 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -486,7 +486,7 @@ my $build_main_nav = sub {
         $dashes->child('dashboard_create' => title => loc('New Dashboard'), path => "/Dashboards/Modify.html?Create=1" );
     }
 
-    my $search = Menu->child( search => title => loc('Search'), path => '/Search/' );
+    my $search = Menu->child( search => title => loc('Search'), path => '/Search/Simple.html' );
 
     my $tickets = $search->child( tickets => title => loc('Tickets'), path => '/Search/Build.html' );
     $tickets->child( simple => title => loc('Simple Search'), path => "/Search/Simple.html" );

commit 4359543316c35b66c028b66e91091dd4ddd4283d
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 12:19:04 2013 -0700

    Link the "Logged in as ____" menu item to the current user's summary page

diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index ef1371b..deead43 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -544,6 +544,7 @@ my $build_main_nav = sub {
     my $about_me = Menu->child( 'preferences' =>
         title        => loc('Logged in as [_1]', $username),
         escape_title => 0,
+        path         => '/User/Summary.html?id=' . $session{CurrentUser}->id,
         sort_order   => 99,
     );
 

commit 03e85345d61a149e23bf1704da83fd5f572ef7da
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 13:48:35 2013 -0700

    $RT::MAJOR_VERSION, $RT::MINOR_VERSION, and $RT::REVISION
    
    Provide conveniently split out subparts of the RT version.

diff --git a/lib/RT/Generated.pm.in b/lib/RT/Generated.pm.in
index ac876f9..77b919b 100644
--- a/lib/RT/Generated.pm.in
+++ b/lib/RT/Generated.pm.in
@@ -51,6 +51,7 @@ use warnings;
 use strict;
 
 our $VERSION = '@RT_VERSION_MAJOR at .@RT_VERSION_MINOR at .@RT_VERSION_PATCH@';
+our ($MAJOR_VERSION, $MINOR_VERSION, $REVISION) = $VERSION =~ /^(\d)\.(\d)\.(\d+)/;
 
 @DATABASE_ENV_PREF@
 

commit 2b083a0f8ebd523a740c6f97b0f9576f7ac2caa9
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 13:45:22 2013 -0700

    Point out how to setup articles on article overview/search when no classes exist
    
    With Articles more visible in the menus, it's helpful to have a pointer
    to a place to start setting up classes and articles.  The criteria for
    "not configured" is no enabled Classes.

diff --git a/share/html/Articles/Article/Search.html b/share/html/Articles/Article/Search.html
index fd8e78f..c70b807 100644
--- a/share/html/Articles/Article/Search.html
+++ b/share/html/Articles/Article/Search.html
@@ -54,6 +54,13 @@
 <table width="100%" border="0">
 <tr>
 <td valign="top" width="50%">
+<%perl>
+if (not $Classes->First) {
+    $m->comp("/Articles/Elements/NeedsSetup");
+} else {
+    $Classes->GotoFirstItem; # Reset for loop below
+}
+</%perl>
 <ul>
 % while (my $class = $Classes->Next) {
 <li><a href="<%RT->Config->Get('WebPath')%>/Articles/Article/Search.html?<% $m->comp('/Elements/QueryString', %filtered, Class => $class->id) %>"><&|/l, $class->Name&>in class [_1]</&></a></li>
diff --git a/share/html/NoAuth/css/base/articles.css b/share/html/Articles/Elements/MaybeNeedsSetup
similarity index 92%
copy from share/html/NoAuth/css/base/articles.css
copy to share/html/Articles/Elements/MaybeNeedsSetup
index d1e61f5..346289d 100644
--- a/share/html/NoAuth/css/base/articles.css
+++ b/share/html/Articles/Elements/MaybeNeedsSetup
@@ -45,10 +45,10 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
-#comp-Articles-Article-Search .label h2 {
-    text-align: left;
-}
-
-.articles-select-article select {
-    max-width: 20em;
-}
+<%init>
+my $Classes = RT::Classes->new( $session{'CurrentUser'} );
+$Classes->LimitToEnabled();
+$Classes->RowsPerPage(1);
+return if $Classes->First;
+</%init>
+<& NeedsSetup &>
diff --git a/share/html/Articles/index.html b/share/html/Articles/Elements/NeedsSetup
similarity index 72%
copy from share/html/Articles/index.html
copy to share/html/Articles/Elements/NeedsSetup
index 958c286..296610f 100644
--- a/share/html/Articles/index.html
+++ b/share/html/Articles/Elements/NeedsSetup
@@ -45,19 +45,8 @@
 %# those contributions and any derivatives thereof.
 %#
 %# END BPS TAGGED BLOCK }}}
-<& /Elements/Header, Title => loc('Articles') &>
-<& /Elements/Tabs &>
-<table width="100%">
-<tr>
-<td valign="top" width="70%">
-<& /Articles/Elements/NewestArticles &>
-<br />
-<& /Articles/Elements/UpdatedArticles &>
-</td>
-<td valign="top">
-<& /Articles/Elements/QuickSearch &>
-<br />
-<& /Articles/Elements/CreateArticle &>
-</td>
-</tr>
-</table>
+%# Stupidly long lines because our extract-message-catalog doesn't handle multiple lines!
+<&|/Widgets/TitleBox, id => "articles-needs-setup", class => "error", title => "Setup needed" &>
+<p><&|/l_unsafe, qq[<a href="@{[RT->Config->Get("WebPath")]}/Admin/Articles/">], '</a>' &>Before Articles can be used, your RT administrator must [_1]create Classes[_2] and apply Article custom fields to them.</&></p>
+<p><&|/l_unsafe, qq[<a href="http://bestpractical.com/rt/docs/$RT::MAJOR_VERSION.$RT::MINOR_VERSION/customizing/articles_introduction.html">], qq[<a href="http://bestpractical.com/rt/docs/$RT::MAJOR_VERSION.$RT::MINOR_VERSION/">], '</a>' &>An [_1]introduction to getting started with articles[_3] is available from [_2]Best Practical's online documentation[_3].</&></p>
+</&>
diff --git a/share/html/Articles/index.html b/share/html/Articles/index.html
index 958c286..b582085 100644
--- a/share/html/Articles/index.html
+++ b/share/html/Articles/index.html
@@ -47,6 +47,7 @@
 %# END BPS TAGGED BLOCK }}}
 <& /Elements/Header, Title => loc('Articles') &>
 <& /Elements/Tabs &>
+<& /Articles/Elements/MaybeNeedsSetup &>
 <table width="100%">
 <tr>
 <td valign="top" width="70%">
diff --git a/share/html/NoAuth/css/base/articles.css b/share/html/NoAuth/css/base/articles.css
index d1e61f5..39a3aa3 100644
--- a/share/html/NoAuth/css/base/articles.css
+++ b/share/html/NoAuth/css/base/articles.css
@@ -52,3 +52,7 @@
 .articles-select-article select {
     max-width: 20em;
 }
+
+#articles-needs-setup a {
+    text-decoration: underline;
+}
diff --git a/share/html/NoAuth/css/base/forms.css b/share/html/NoAuth/css/base/forms.css
index 6a75482..2dfc216 100644
--- a/share/html/NoAuth/css/base/forms.css
+++ b/share/html/NoAuth/css/base/forms.css
@@ -135,6 +135,16 @@ div.results .titlebox-content {
   padding: 0;
 }
 
+.results .titlebox-content > p:first-child,
+.error .titlebox-content > p:first-child {
+    margin-top: 0;
+}
+
+.results .titlebox-content > p:last-child,
+.error .titlebox-content > p:last-of-type {
+    margin-bottom: 0;
+}
+
 
 .label, .labeltop {
  text-align: right;

commit ba0ed2a3ee62d4c3584fc9e58c170e4a6b5712fd
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Fri Apr 19 15:14:38 2013 -0700

    Adjust menu labels and ids in tests to match the changes

diff --git a/t/articles/upload-customfields.t b/t/articles/upload-customfields.t
index 0656168..29bd677 100644
--- a/t/articles/upload-customfields.t
+++ b/t/articles/upload-customfields.t
@@ -32,7 +32,7 @@ ok($ret, "Test class created");
 my ($url, $m) = RT::Test->started_ok;
 isa_ok($m, 'Test::WWW::Mechanize');
 ok($m->login, 'logged in');
-$m->follow_link_ok( { text => 'Configuration' } );
+$m->follow_link_ok( { text => 'Admin' } );
 $m->title_is(q/RT Administration/, 'admin screen');
 $m->follow_link_ok( { text => 'Custom Fields' } );
 $m->title_is(q/Select a Custom Field/, 'admin-cf screen');
diff --git a/t/ticket/scrips_batch.t b/t/ticket/scrips_batch.t
index 625eabe..0a996ce 100644
--- a/t/ticket/scrips_batch.t
+++ b/t/ticket/scrips_batch.t
@@ -16,7 +16,7 @@ ok $m->login, 'logged in as root';
 
 my $sid;
 {
-    $m->follow_link_ok( { id => 'tools-config-queues' } );
+    $m->follow_link_ok( { id => 'admin-queues' } );
     $m->follow_link_ok( { text => $queue->Name } );
     $m->follow_link_ok( { id => 'page-scrips-create'});
 
diff --git a/t/web/cf_access.t b/t/web/cf_access.t
index 91dbca7..5cc9d38 100644
--- a/t/web/cf_access.t
+++ b/t/web/cf_access.t
@@ -12,7 +12,7 @@ ok $m->login, 'logged in';
 
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
 
     # Test form validation
     $m->submit_form(
@@ -94,7 +94,7 @@ diag "apply the CF to General queue";
 my ( $cf, $cfid, $tid );
 {
     $m->title_is(q/Editing CustomField img/, 'admin-cf created');
-    $m->follow_link( id => 'tools-config-queues');
+    $m->follow_link( id => 'admin-queues');
     $m->follow_link( text => 'General' );
     $m->title_is(q/Configuration for queue General/, 'admin-queue: general');
     $m->follow_link( id => 'page-ticket-custom-fields');
diff --git a/t/web/cf_date.t b/t/web/cf_date.t
index 4ea93e4..9b892d0 100644
--- a/t/web/cf_date.t
+++ b/t/web/cf_date.t
@@ -14,7 +14,7 @@ my $cf_name = 'test cf date';
 my $cfid;
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields    => {
@@ -33,7 +33,7 @@ my $queue = RT::Test->load_or_create_queue( Name => 'General' );
 ok $queue && $queue->id, 'loaded or created queue';
 
 {
-    $m->follow_link( id => 'tools-config-queues-select');
+    $m->follow_link( id => 'admin-queues-select');
     $m->title_is( q/Admin queues/, 'admin-queues screen' );
     $m->follow_link( text => 'General' );
     $m->title_is( q/Configuration for queue General/,
diff --git a/t/web/cf_datetime.t b/t/web/cf_datetime.t
index 8cc099d..02fa39e 100644
--- a/t/web/cf_datetime.t
+++ b/t/web/cf_datetime.t
@@ -24,7 +24,7 @@ if ( ( $ENV{RT_TEST_WEB_HANDLER} || '' ) =~ /^apache(\+mod_perl)?$/
 my $cfid;
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields => {
diff --git a/t/web/cf_groupings_user.t b/t/web/cf_groupings_user.t
index 74037e1..fe79ae5 100644
--- a/t/web/cf_groupings_user.t
+++ b/t/web/cf_groupings_user.t
@@ -46,7 +46,7 @@ my %location = (
 );
 {
     note "testing Create";
-    $m->follow_link_ok({id => 'tools-config-users-create'}, 'Create ');
+    $m->follow_link_ok({id => 'admin-users-create'}, 'Create ');
 
     my $dom = $m->dom;
     $m->form_name('UserCreate');
diff --git a/t/web/cf_image.t b/t/web/cf_image.t
index 54d54f2..355f259 100644
--- a/t/web/cf_image.t
+++ b/t/web/cf_image.t
@@ -5,7 +5,7 @@ use RT::Test tests => 'no_declare';
 
 my (undef, $m) = RT::Test->started_ok;
 $m->login;
-$m->follow_link( id => 'tools-config-custom-fields-create' );
+$m->follow_link( id => 'admin-custom-fields-create' );
 $m->submit_form_ok({
     form_name => "ModifyCustomField",
     fields    => {
diff --git a/t/web/cf_onqueue.t b/t/web/cf_onqueue.t
index bd6ae66..dd3320a 100644
--- a/t/web/cf_onqueue.t
+++ b/t/web/cf_onqueue.t
@@ -8,7 +8,7 @@ ok $m->login, 'logged in';
 
 diag "Create a queue CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields => {
diff --git a/t/web/cf_render_type.t b/t/web/cf_render_type.t
index 8d8efa8..42efb32 100644
--- a/t/web/cf_render_type.t
+++ b/t/web/cf_render_type.t
@@ -11,7 +11,7 @@ my $cf_name = 'test render type';
 my $cfid;
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields => {
diff --git a/t/web/cf_select_one.t b/t/web/cf_select_one.t
index 36e6b7a..3d45d3e 100644
--- a/t/web/cf_select_one.t
+++ b/t/web/cf_select_one.t
@@ -12,7 +12,7 @@ my $cf_name = 'test select one value';
 my $cfid;
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields => {
@@ -49,7 +49,7 @@ ok $queue && $queue->id, 'loaded or created queue';
 
 diag "apply the CF to General queue";
 {
-    $m->follow_link( id => 'tools-config-queues');
+    $m->follow_link( id => 'admin-queues');
     $m->follow_link( text => 'General' );
     $m->title_is(q/Configuration for queue General/, 'admin-queue: general');
     $m->follow_link( id => 'page-ticket-custom-fields');
diff --git a/t/web/cf_values_class.t b/t/web/cf_values_class.t
index 6466427..6535c50 100644
--- a/t/web/cf_values_class.t
+++ b/t/web/cf_values_class.t
@@ -14,7 +14,7 @@ my $cf_name = 'test values class';
 my $cfid;
 diag "Create a CF";
 {
-    $m->follow_link( id => 'tools-config-custom-fields-create');
+    $m->follow_link( id => 'admin-custom-fields-create');
     $m->submit_form(
         form_name => "ModifyCustomField",
         fields => {
diff --git a/t/web/class_create.t b/t/web/class_create.t
index 2d9ad03..7723d7a 100644
--- a/t/web/class_create.t
+++ b/t/web/class_create.t
@@ -13,7 +13,7 @@ my $class_name = 'test class';
 my $class_id;
 diag "Create a class";
 {
-    $m->follow_link( id => 'tools-config-articles-classes-create');
+    $m->follow_link( id => 'admin-articles-classes-create');
 
     # Test class form validation
     $m->submit_form(
diff --git a/t/web/config_tab_right.t b/t/web/config_tab_right.t
index 69bf80c..df14690 100644
--- a/t/web/config_tab_right.t
+++ b/t/web/config_tab_right.t
@@ -19,7 +19,7 @@ my ($baseurl, $m) = RT::Test->started_ok;
 ok $m->login($uname, $upass), "logged in";
 
 {
-    $m->content_lacks('Configuration', 'no configuration tab');
+    $m->content_lacks('li-admin', 'no Admin tab');
     $m->get('/Admin/');
     is $m->status, 403, 'no access to /Admin/';
 }
@@ -32,9 +32,9 @@ RT::Test->set_rights(
 
 {
     $m->get('/');
-    $m->content_contains('Configuration', 'configuration tab is there');
+    $m->content_contains('li-admin', 'admin tab is there');
 
-    $m->follow_link_ok({text => 'Configuration'});
+    $m->follow_link_ok({text => 'Admin'});
     is $m->status, 200, 'user has access to /Admin/';
 }
 
diff --git a/t/web/group_create.t b/t/web/group_create.t
index 548970d..f62e565 100644
--- a/t/web/group_create.t
+++ b/t/web/group_create.t
@@ -13,7 +13,7 @@ my $group_name = 'test group';
 my $group_id;
 diag "Create a group";
 {
-    $m->follow_link( id => 'tools-config-groups-create');
+    $m->follow_link( id => 'admin-groups-create');
 
     # Test group form validation
     $m->submit_form(
diff --git a/t/web/html_template.t b/t/web/html_template.t
index 78b95a3..abf68c5 100644
--- a/t/web/html_template.t
+++ b/t/web/html_template.t
@@ -13,7 +13,7 @@ diag('make Autoreply template a html one and add utf8 chars')
   if $ENV{TEST_VERBOSE};
 
 {
-    $m->follow_link_ok( { id => 'tools-config-global-templates' },     '-> Templates' );
+    $m->follow_link_ok( { id => 'admin-global-templates' },     '-> Templates' );
     $m->follow_link_ok( { text => 'Autoreply' },     '-> Autoreply' );
 
     $m->submit_form(
diff --git a/t/web/queue_create.t b/t/web/queue_create.t
index 5668762..40f7b3b 100644
--- a/t/web/queue_create.t
+++ b/t/web/queue_create.t
@@ -13,7 +13,7 @@ my $queue_name = 'test queue';
 my $queue_id;
 diag "Create a queue";
 {
-    $m->follow_link( id => 'tools-config-queues-create');
+    $m->follow_link( id => 'admin-queues-create');
 
     # Test queue form validation
     $m->submit_form(
diff --git a/t/web/rights.t b/t/web/rights.t
index 23b357f..c7e8aac 100644
--- a/t/web/rights.t
+++ b/t/web/rights.t
@@ -6,7 +6,7 @@ use RT::Test tests => 14;
 my ($baseurl, $m) = RT::Test->started_ok;
 ok $m->login, "logged in";
 
-$m->follow_link_ok({ id => 'tools-config-global-group-rights'});
+$m->follow_link_ok({ id => 'admin-global-group-rights'});
 
 
 sub get_rights {
diff --git a/t/web/rights1.t b/t/web/rights1.t
index 94d0e8c..2cc7689 100644
--- a/t/web/rights1.t
+++ b/t/web/rights1.t
@@ -29,7 +29,7 @@ $agent->login( $user_obj->Name, 'customer');
 
 # Test for absence of Configure and Preferences tabs.
 ok(!$agent->find_link( url => "$RT::WebPath/Admin/",
-                       text => 'Configuration'), "No config tab" );
+                       text => 'Admin'), "No admin tab" );
 ok(!$agent->find_link( url => "$RT::WebPath/User/Prefs.html",
                        text => 'Preferences'), "No prefs pane" );
 
@@ -43,7 +43,7 @@ $agent->reload;
 
 $agent->content_contains('Logout', "Reloaded page successfully");
 ok($agent->find_link( url => "$RT::WebPath/Admin/",
-                       text => 'Configuration'), "Found config tab" );
+                       text => 'Admin'), "Found admin tab" );
 my ($revokeid,$revokemsg) =$user_obj->PrincipalObj->RevokeRight(Right => 'ShowConfigTab');
 ok ($revokeid,$revokemsg);
 ($grantid,$grantmsg) =$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf');
diff --git a/t/web/scrips.t b/t/web/scrips.t
index f1aef54..6860e3e 100644
--- a/t/web/scrips.t
+++ b/t/web/scrips.t
@@ -20,7 +20,7 @@ ok $queue_r && $queue_r->id, 'loaded or created queue';
 my ($baseurl, $m) = RT::Test->started_ok;
 ok $m->login, "logged in";
 
-$m->follow_link_ok({id => 'tools-config-global-scrips-create'});
+$m->follow_link_ok({id => 'admin-global-scrips-create'});
 
 sub prepare_code_with_value {
     my $value = shift;
@@ -55,7 +55,7 @@ sub prepare_code_with_value {
     foreach my $data (@values_for_actions) {
         my ($condition, $prepare_code_value) = @$data;
         diag "Create Scrip (Cond #$condition)" if $ENV{TEST_VERBOSE};
-        $m->follow_link_ok({id => 'tools-config-global-scrips-create'});
+        $m->follow_link_ok({id => 'admin-global-scrips-create'});
         my $prepare_code = prepare_code_with_value($prepare_code_value);
         $m->form_name('CreateScrip');
         $m->set_fields(
@@ -113,7 +113,7 @@ sub prepare_code_with_value {
 
 note "check basics in scrip's admin interface";
 {
-    $m->follow_link_ok( { id => 'tools-config-global-scrips-create' } );
+    $m->follow_link_ok( { id => 'admin-global-scrips-create' } );
     ok $m->form_name('CreateScrip');
     is $m->value_name('Description'), '', 'empty value';
     is $m->value_name('ScripAction'), '-', 'empty value';
@@ -160,7 +160,7 @@ note "check basics in scrip's admin interface";
 
 note "check application in admin interface";
 {
-    $m->follow_link_ok({ id => 'tools-config-global-scrips-create' });
+    $m->follow_link_ok({ id => 'admin-global-scrips-create' });
     $m->submit_form_ok({
         with_fields => {
             Description     => "testing application",
@@ -216,13 +216,13 @@ note "check templates in scrip's admin interface";
           'Transaction'
     );
 
-    $m->follow_link_ok( { id => 'tools-config-global-scrips-create' } );
+    $m->follow_link_ok( { id => 'admin-global-scrips-create' } );
     ok $m->form_name('CreateScrip');
     my @templates = ($m->find_all_inputs( type => 'option', name => 'Template' ))[0]
         ->possible_values;
     is_deeply(\@templates, \@default);
 
-    $m->follow_link_ok( { id => 'tools-config-queues' } );
+    $m->follow_link_ok( { id => 'admin-queues' } );
     $m->follow_link_ok( { text => 'General' } );
     $m->follow_link_ok( { id => 'page-scrips-create' } );
 
@@ -279,7 +279,7 @@ note "go to apply page and apply with template change";
 
 note "apply scrip in different stage to different queues";
 {
-    $m->follow_link_ok( { id => 'tools-config-queues' } );
+    $m->follow_link_ok( { id => 'admin-queues' } );
     $m->follow_link_ok( { text => 'General' } );
     $m->follow_link_ok( { id => 'page-scrips-create'});
 
diff --git a/t/web/template.t b/t/web/template.t
index 4a2e6c1..1a02dc9 100644
--- a/t/web/template.t
+++ b/t/web/template.t
@@ -17,7 +17,7 @@ ok( RT::Test->set_rights(
 ok $m->login('user_a', 'password'), 'logged in as user A';
 
 # get to the templates screen
-$m->follow_link( text => 'Configuration' );
+$m->follow_link( text => 'Admin' );
 $m->title_is(q{RT Administration}, 'admin screen');
 
 $m->follow_link( text => 'Global' );

commit 3767eddc534edaa6cf1b490e6183a5a148e1af3b
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Thu Apr 25 11:14:10 2013 -0700

    Incorporate a mention of rights into the "articles needs setup" text

diff --git a/share/html/Articles/Elements/NeedsSetup b/share/html/Articles/Elements/NeedsSetup
index 296610f..e32704a 100644
--- a/share/html/Articles/Elements/NeedsSetup
+++ b/share/html/Articles/Elements/NeedsSetup
@@ -47,6 +47,6 @@
 %# END BPS TAGGED BLOCK }}}
 %# Stupidly long lines because our extract-message-catalog doesn't handle multiple lines!
 <&|/Widgets/TitleBox, id => "articles-needs-setup", class => "error", title => "Setup needed" &>
-<p><&|/l_unsafe, qq[<a href="@{[RT->Config->Get("WebPath")]}/Admin/Articles/">], '</a>' &>Before Articles can be used, your RT administrator must [_1]create Classes[_2] and apply Article custom fields to them.</&></p>
+<p><&|/l_unsafe, qq[<a href="@{[RT->Config->Get("WebPath")]}/Admin/Articles/">], '</a>' &>Before Articles can be used, your RT administrator must [_1]create Classes[_2], apply Article custom fields to them, and grant users rights on the classes and CFs.</&></p>
 <p><&|/l_unsafe, qq[<a href="http://bestpractical.com/rt/docs/$RT::MAJOR_VERSION.$RT::MINOR_VERSION/customizing/articles_introduction.html">], qq[<a href="http://bestpractical.com/rt/docs/$RT::MAJOR_VERSION.$RT::MINOR_VERSION/">], '</a>' &>An [_1]introduction to getting started with articles[_3] is available from [_2]Best Practical's online documentation[_3].</&></p>
 </&>

commit f437ebb74933d90214b134268f1d9ec609430b88
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Thu Apr 25 11:15:10 2013 -0700

    Use the standard "articles needs setup" widget on the Article create page

diff --git a/share/html/Articles/Article/PreCreate.html b/share/html/Articles/Article/PreCreate.html
index d1060e6..dea58ef 100644
--- a/share/html/Articles/Article/PreCreate.html
+++ b/share/html/Articles/Article/PreCreate.html
@@ -58,6 +58,5 @@
 % }
 </ul>
 % unless ( $have_classes ) {
-<span><&|/l&>Permission Denied</&></span>
-<p><span><&|/l&>To create an Article, you must first create a Class and have access to that Class.</&></span></p>
+<& /Articles/Elements/NeedsSetup &>
 % }

commit 46fc44784bd65e8b1a6af2adfbe13e7b071336da
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Thu Apr 25 11:15:46 2013 -0700

    Add a Create link to the Articles menu

diff --git a/share/html/Elements/Tabs b/share/html/Elements/Tabs
index deead43..adf8753 100644
--- a/share/html/Elements/Tabs
+++ b/share/html/Elements/Tabs
@@ -500,6 +500,7 @@ my $build_main_nav = sub {
         my $articles = Menu->child( articles => title => loc('Articles'), path => "/Articles/index.html");
         $articles->child( articles => title => loc('Overview'), path => "/Articles/index.html" );
         $articles->child( topics   => title => loc('Topics'),   path => "/Articles/Topics.html" );
+        $articles->child( create   => title => loc('Create'),   path => "/Articles/Article/PreCreate.html" );
         $articles->child( search   => title => loc('Search'),   path => "/Articles/Article/Search.html" );
     }
 

commit 36acf7932f959779a4b12b057b6c5eeab7db15b2
Author: Thomas Sibley <trs at bestpractical.com>
Date:   Thu Apr 25 11:18:01 2013 -0700

    Update documentation for the new menu structure

diff --git a/docs/authentication.pod b/docs/authentication.pod
index c4201fc..38cc82c 100644
--- a/docs/authentication.pod
+++ b/docs/authentication.pod
@@ -9,7 +9,7 @@ authentication systems.
 RT's native internal authentication system provides administration tools to
 manage usernames and passwords.  If you plan to run your RT as a stand-alone
 system and don't need to use accounts associated with any other system, this
-may be all you need.  The administration pages under Configuration → Users
+may be all you need.  The administration pages under Admin → Users
 provide new user creation as well as password setting and control of RT's
 privileged flag for existing users.
 
diff --git a/docs/customizing/approvals.pod b/docs/customizing/approvals.pod
index 4f768f7..3d16252 100644
--- a/docs/customizing/approvals.pod
+++ b/docs/customizing/approvals.pod
@@ -24,8 +24,8 @@ and process the approval or rejection.
 Since this example will use a change management queue as the
 queue where tickets need approval, first we'll set up the queue.
 
-Login into UI as the 'root' user. Go to Tools -> Configuration ->
-Queues and create a new 'Change requests' queue.
+Login into UI as the 'root' user. Go to Admin -> Queues and create a new
+'Change requests' queue.
 
 When you set up this queue, do not select the "approvals" Lifecycle.
 That selection is for the ___Approvals queue itself, not for queues that
@@ -94,7 +94,7 @@ queue.
 
 ___Approvals is a special queue where all approvals are created. The queue
 is disabled and is not shown in until you search for it.
-Go to Tools -> Configuration -> Queues, leave "Name is" in the search
+Go to Admin -> Queues, leave "Name is" in the search
 area and enter ___Approvals into the search
 field. Check 'Include disabled queues in listing.' and click Go!
 You should now see the ___Approvals queue configuration page.
diff --git a/docs/customizing/articles_introduction.pod b/docs/customizing/articles_introduction.pod
index 73b5c33..363a385 100644
--- a/docs/customizing/articles_introduction.pod
+++ b/docs/customizing/articles_introduction.pod
@@ -8,11 +8,16 @@ RT.  They are organized into classes and topics.
 
 =head2 UI
 
-The user interface to Articles is available from the Tools -> Articles
-menu.  Admin functionality can be found under Tools -> Configuration ->
-Articles.  Once configured, articles will become available for searching
-on the Reply/Comment page on tickets.  There are L</"Configuration Options">
-to make Articles available on ticket creation.
+The user interface to Articles is available from the Articles menu.  Admin
+functionality can be found under Admin -> Articles.  Once configured, articles
+will become available for searching on the Reply/Comment page on tickets.
+There are L</"Configuration Options"> to make Articles available on ticket
+creation.
+
+For the Articles menu to be visible to your Privileged users, you must grant
+Privileged the ShowArticlesMenu right globally (Admin -> Global -> Group
+Rights).  You may grant the right as selectively as you wish if, for example,
+you only want a certain group of your users to use articles.
 
 =head2 Basics
 
@@ -27,7 +32,7 @@ Classes can be made available globally or on a per-Queue basis.
 =head3 Classes
 
 Classes are equivalent to RT's queues.  They can be created by going
-to Tools -> Configuration -> Articles -> Classes -> New Class.  Articles
+to Admin -> Articles -> Classes -> New Class.  Articles
 are assigned to one Class.  When you create Custom Fields for use with
 Articles, they will be applied Globally or to a Class, like Custom
 Fields are applied to a Queue in RT.
@@ -40,7 +45,7 @@ when inserting the Article in a reply. You can control this behavior on
 the Class configuration page.
 
 Classes need to be Applied, just like a Custom Field, by using the
-Applies To link on the Modify Class page (Tools -> Configuration ->
+Applies To link on the Modify Class page (Admin ->
 Articles -> Classes, select the class to modify).  You can apply
 them globally or on a queue-by-queue basis.
 
@@ -48,7 +53,7 @@ them globally or on a queue-by-queue basis.
 
 You can also use Topics to organize your Articles.  While editing a
 Class, there is a Topics tab for Class-specific Topics.  You can create
-global Topics from the Global tab under Tools -> Configuration.
+global Topics from the Global tab under Admin.
 
 When editing Topics, type the name (and optionally description) of the
 Topic, and then click the button at the appropriate location in the
diff --git a/docs/customizing/styling_rt.pod b/docs/customizing/styling_rt.pod
index c5802a8..3d0e171 100644
--- a/docs/customizing/styling_rt.pod
+++ b/docs/customizing/styling_rt.pod
@@ -39,7 +39,7 @@ Logged in as -> Settings -> Options and selecting a different theme.
 
 RT has some built-in controls to manage the look of the theme you select.
 To use the Theme Editor, log in as a SuperUser (like root), and navigate
-to Tools -> Configuration -> Tools -> Theme.
+to Admin -> Tools -> Theme.
 
 =for html <img alt="RT theme editor, defaults" src="../images/theme_editor_defaults.png">
 
diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index faba9ef..89cc059 100755
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -2669,7 +2669,7 @@ Set(%Lifecycles,
 
 RT can show administrators a feed of recent RT releases and other
 related announcements and information from Best Practical on the top
-level Configuration page.  This feature helps you stay up to date on
+level Admin page.  This feature helps you stay up to date on
 RT security announcements and version updates.
 
 RT provides this feature using an "iframe" on C</Admin/index.html>
@@ -2812,7 +2812,7 @@ C<$StatementLog> to be the level that you wish SQL statements to be
 logged at.
 
 Enabling this option will also expose the SQL Queries page in the
-Configuration -> Tools menu for SuperUsers.
+Admin -> Tools menu for SuperUsers.
 
 =cut
 
diff --git a/lib/RT/Action/LinearEscalate.pm b/lib/RT/Action/LinearEscalate.pm
index f9840d1..d34415b 100644
--- a/lib/RT/Action/LinearEscalate.pm
+++ b/lib/RT/Action/LinearEscalate.pm
@@ -98,7 +98,7 @@ the Due date. Tickets without due date B<are not updated>.
 =head1 CONFIGURATION
 
 Initial and Final priorities are controlled by queue's options
-and can be defined using the web UI via Configuration tab. This
+and can be defined using the web UI via Admin tab. This
 action should handle correctly situations when initial priority
 is greater than final.
 
diff --git a/lib/RT/Crypt/GnuPG.pm b/lib/RT/Crypt/GnuPG.pm
index 6164a42..f2b3f1f 100644
--- a/lib/RT/Crypt/GnuPG.pm
+++ b/lib/RT/Crypt/GnuPG.pm
@@ -216,7 +216,7 @@ Read `man gpg` to get list of all options this program support.
 =head2 Per-queue options
 
 Using the web interface it's possible to enable signing and/or encrypting by
-default. As an administrative user of RT, open 'Configuration' then 'Queues',
+default. As an administrative user of RT, open 'Admin' then 'Queues',
 and select a queue. On the page you can see information about the queue's keys 
 at the bottom and two checkboxes to choose default actions.
 
diff --git a/lib/RT/Shredder.pm b/lib/RT/Shredder.pm
index dda1ba2..e4775bf 100644
--- a/lib/RT/Shredder.pm
+++ b/lib/RT/Shredder.pm
@@ -105,7 +105,7 @@ See also 'rt-shredder --help'.
 =head2 Web based interface (WebUI)
 
 Shredder's WebUI integrates into RT's WebUI.  You can find it in the
-Configuration->Tools->Shredder tab.  The interface is similar to the
+Admin->Tools->Shredder tab.  The interface is similar to the
 CLI and gives you the same functionality. You can find 'Shredder' link
 at the bottom of tickets search results, so you could wipeout tickets
 in the way similar to the bulk update.

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


More information about the Rt-commit mailing list