[Rt-commit] rt branch, 4.6/core-group-management-extensions, repushed

Blaine Motsinger blaine at bestpractical.com
Fri Aug 23 17:32:52 EDT 2019


The branch 4.6/core-group-management-extensions was deleted and repushed:
       was ef740e84c8ad74605a872129bf567dc37d9566bc
       now dd3bd21d91c8cf2a94fac75b08a9a857e6412fc7

  1: 7f13f0055 =   1: 7f13f0055 Allow for multiple base themes by avoiding showing any to the user
  2: 0ce97154b =   2: 0ce97154b Add unaltered copies of base and rudder themes to make responsive
  3: 565e91062 =   3: 565e91062 rudder-responsive imports base-responsive rather than base
  4: c151cf258 =   4: c151cf258 Make boxcontainer padding rules less demanding
  5: 45e22b27c =   5: 45e22b27c Make RT at a glance two-column layout responsive
  6: 66a41a296 =   6: 66a41a296 Improve whitespace around content for rudder-responsive
  7: f0df65c03 =   7: f0df65c03 Generalize the two-column layout markup
  8: 4a2814fdb =   8: 4a2814fdb Add a grid system
  9: b7008bcd8 =   9: b7008bcd8 Make ticket display ShowSummary responsive
 10: 2a14260d4 =  10: 2a14260d4 Make search field really narrow on narrow screens
 11: 050d2b466 =  11: 050d2b466 Make the "new ticket in" and queue selector responsive
 12: 7293efce0 =  12: 7293efce0 Narrow gap between new ticket and search fields on narrow screens
 13: 26d3640d3 =  13: 26d3640d3 Display more of the title when the page is narrow
 14: 743fca5fe =  14: 743fca5fe On narrow screens pop up a modal for selecting ticket queue
 15: fc435d351 =  15: fc435d351 Hide "RT for example.com" on narrow screens
 16: c12f7a2fd =  16: c12f7a2fd Eliminate history display's margin-left on narrow screens
 17: 031767c67 =  17: 031767c67 On very narrow screens, zero out body padding
 18: a70a12eb8 =  18: a70a12eb8 Get rid of horizontal padding on ticket history on narrow screens
 19: ed77add0f =  19: ed77add0f Collapse padding at a wider (700px) viewport
 20: bf6072713 =  20: bf6072713 Prevent reminders from breaking layout with its long text field
 21: 3bf0b2783 =  21: 3bf0b2783 Convert Links table to have .fields/.field using table CSS
 22: ef390831d =  22: ef390831d Improve styling of links for small screens
 23: 9e0e238dc =  23: 9e0e238dc Don't wrap labels
 24: abde98f8c =  24: abde98f8c Limit the breakdown of fields tables to just "wide" ones
 25: a036b7218 =  25: a036b7218 Convert basics, dates, and people groupings away from tables
 26: 18410558f =  26: 18410558f Add margin-left to <li>s within a wide fields table that breaks
 27: abe679392 =  27: abe679392 Make padding on field names more consistent
 28: 4535278a7 =  28: 4535278a7 Convert new reminder form from table to fields
 29: 902013336 =  29: 902013336 Improve rendering of ticket update page
 30: b83145a17 =  30: b83145a17 Add messagedetails to jumbo page titlebox
 31: b30e4e3be =  31: b30e4e3be Improve display of reminders table and form
 32: a3debdb88 =  32: a3debdb88 Avoid breaking layout with new reminder subject
 33: a4ec31340 =  33: a4ec31340 Remove minimum height from titleboxes
 34: 9e2e9f847 =  34: 9e2e9f847 Restore original titlebox padding rule but only for fields
 35: f048c2714 =  35: f048c2714 Remove spurious <br> tag
 36: 14bd5afdb =  36: 14bd5afdb Switch ticket update from tables to fields
 37: b6076f108 =  37: b6076f108 Linearize ticket update form on narrow widths
 38: 9847f9464 =  38: 9847f9464 Make update form take up 100% of the titlebox
 39: 3f12ac4ab =  39: 3f12ac4ab Fix reply cc/bcc/subject fields to be 100% width
 40: 7d903afc9 =  40: 7d903afc9 Rename .crypto to .empty to better explain what it's for
 41: 0b1e7df31 =  41: 0b1e7df31 Make ticket create responsive
 42: 21b722a26 =  42: 21b722a26 First pass at responsive for SelfService/Create
 43: a5c7652c3 =  43: a5c7652c3 First pass at responsive for SelfService/Update
 44: 8b58c4a15 =  44: 8b58c4a15 Remove AsTable from Edit CFs
 45: 921d72c94 =  45: 921d72c94 Remove these pre-responsive CF edit styles
 46: f5bcb7577 =  46: f5bcb7577 Wrap selfservice update form in a titlebox
 47: 94e44ea62 =  47: 94e44ea62 Wrap selfservice create form in a titlebox
 48: efe3f52d3 =  48: efe3f52d3 Convert selfservice display to responsive
 49: fc80f17b7 =  49: fc80f17b7 Switch ShowCustomFields from table to fields
 50: d26da2aa1 =  50: d26da2aa1 Fix transaction actions overlapping description
 51: 726ff3ed2 =  51: 726ff3ed2 Switch QuickCreate from table to fields
 52: 1dac409ae =  52: 1dac409ae Improve whitespace around fields
 53: f99594d6b =  53: f99594d6b Improve padding and spacing on forms
 54: 9b94580d3 =  54: 9b94580d3 Have searches use the full width of the viewport
 55: df8c440d3 =  55: df8c440d3 Make login box more responsive
 56: 6c19bf649 =  56: 6c19bf649 Add missing type="text" for login username input
 57: ff38918b6 =  57: ff38918b6 Improve form rendering for Mobile Safari
 58: bc548a5bb =  58: bc548a5bb Separate existing reminders from create form with hr only if there are reminders
 59: 3d16535fd =  59: 3d16535fd Remove unnecessary margin-top on collection tables
 60: a6e560500 =  60: a6e560500 Fix save button on ticket reminders to not use inline style
 61: 33e559e98 =  61: 33e559e98 Fix error result background color for rudder
 62: 6366d835d =  62: 6366d835d Make QueueList take up the full width
 63: 753b2e278 =  63: 753b2e278 Give rudder the responsive viewport meta tag
 64: 96258f3a2 =  64: 96258f3a2 Turn off autocapitalize on usernames
 65: b738946b7 =  65: b738946b7 Don't let users select the "drop files here" dropzone text
 66: ed9896623 =  66: ed9896623 Improve error transaction colors
 67: fc2c7dd24 =  67: fc2c7dd24 Replace ShowAttachments's <font size="-2"> with CSS
 68: 0ed134c2a =  68: 0ed134c2a Word-break very (perhaps maliciously) long attachment names
 69: 329257c04 =  69: 329257c04 Limit the width of quickcreate since it looks silly when very very wide
 70: 7e8fc73fa =  70: 7e8fc73fa Use full width for MyReminders table
 71: 5acf57a6e =  71: 5acf57a6e Fix Modify Basics to be div.fields rather than table
 72: 13b9aa7be =  72: 13b9aa7be Add missing type="text" to more input fields
 73: 37a3c8190 =  73: 37a3c8190 Avoid menulist-button styling for multi-row select boxes
 74: 76ebbf037 =  74: 76ebbf037 Middle valign fields
 75: abd46fe43 =  75: abd46fe43 Convert EditPeople from nested tables to responsive
 76: 6b1ed3291 =  76: 6b1ed3291 Load the correct version of msie.css
 77: 55f62d910 =  77: 55f62d910 Add a BeforeNav stylesheet plugin
 78: 713ae954b =  78: 713ae954b Make menus overflow into a "More" item on narrow viewports
 79: 0817597f0 =  79: 0817597f0 Remove hyperlink behavior from top-level More menu items
 80: 51ff61b95 =  80: 51ff61b95 Add type attribute to many input fields that were missing it
 81: 9920a2bae =  81: 9920a2bae Fix css rule for one-time cc etc becoming email fields
 82: 639ec0a0a =  82: 639ec0a0a Switch new ticket create popup to a list of links rather than a select
 83: 263260d84 =  83: 263260d84 Fix a regression on legacy themes with CF edit panels
 84: e7a24762e =  84: e7a24762e Override 400px width of jquery modals
 85: d05db9319 =  85: d05db9319 Fix quick create on narrow screens
 86: 1ce3e7535 =  86: 1ce3e7535 Fix width regression with quickcreate requestor field
 87: 0bdd6b928 =  87: 0bdd6b928 Switch AddLinks from tables to fields
 88: de71b019f =  88: de71b019f Improve rendering of date editing form
 89: 7e88d621b =  89: 7e88d621b Improve padding to be more consistent
 90: 15dd4d5e1 =  90: 15dd4d5e1 Make modify links use fluid two-column layout
 91: 4bb74ee24 =  91: 4bb74ee24 Improve edit links to use fields instead of a table
 92: 71adf4d59 =  92: 71adf4d59 Convert merge from table to fields
 93: 8bed2a517 =  93: 8bed2a517 Use the same nomenclature "Message" not "Content" for jumbo
 94: 821af7169 =  94: 821af7169 Switch Jumbo reply panel from table to fields
 95: 451b94ebf =  95: 451b94ebf Jumbo: Wrap both basic fields and custom fields in a single fields table
 96: 8e0edb097 =  96: 8e0edb097 Make message form on Jumbo more consistent
 97: 3410d1f86 =  97: 3410d1f86 Make simple search form more responsive
 98: ac878afd0 =  98: ac878afd0 Fix rudder-responsive getting bottom border radius
 99: ee6fd153c =  99: ee6fd153c Remove margin-right from titleboxes in rudder-responsive
100: 19e92fb58 = 100: 19e92fb58 Improve design of more about requestors panel
101: 0795549da = 101: 0795549da Make user prefs page responsive to small screens
102: 3142b6f1e = 102: 3142b6f1e Remove 20em width from ticket subject on basics
103: d2c34c901 = 103: d2c34c901 Wrap forward message in a titlebox
104: e93736f6e = 104: e93736f6e Switch forward from table to fields
105: 865306bb5 = 105: 865306bb5 Fix "more about requestors" overlap
106: a91ad6b41 = 106: a91ad6b41 Update tests for the responsive HTML change
107: 309321394 = 107: 309321394 Fix Nav tweaking for installer mode
108: 5d80cac56 = 108: 5d80cac56 Initial elevator theme, copied from rudder-responsive
109: 9e2710667 = 109: 9e2710667 Add popper.js 1.14.6 dependency
110: d5361e4f8 = 110: d5361e4f8 Add bootstrap 4.2.1 dependency
111: ce6db31de = 111: ce6db31de Add missing "field" css class for Started field
112: 18b4c17ed = 112: 18b4c17ed Get rid of strikethrough in menu
113: 2c1913cea = 113: 2c1913cea Fix h1 position to make it vertically centered
114: 16a290165 = 114: 16a290165 Fix results position to make it vertically centered
115: fa1eddb07 = 115: fa1eddb07 Drop the incomplete rudder-responsive theme
116: 30c74df65 = 116: 30c74df65 Update copyright to 2019 for new added theme related files
117: 8202a7ed6 = 117: 8202a7ed6 Initial elevator-dark theme
118: 6e8c418d2 = 118: 6e8c418d2 Add bootstrap-select 1.13.7 dependency
119: 65a2b8e72 = 119: 65a2b8e72 Switch to bootstrap styled table
120: d3c438a8c = 120: d3c438a8c Switch to bootstrap card for titleboxes
121: 19983ce0c = 121: 19983ce0c Add %ThemeJSFiles config to serve different js for different themes
122: c20ba1ee1 = 122: c20ba1ee1 Migrate search builder for elevator themes
123: c381b52d6 = 123: c381b52d6 Migrate homepage to elevator themes
124: 2b95d7c55 = 124: 2b95d7c55 Add bootstrap-combobox 1.2.0 dependency
125: 16785047a = 125: 16785047a Migrate cf edit components to elevator themes
126: 3434d9955 = 126: 3434d9955 Migrate ticket modify pages to elevator themes
127: 3287cf808 = 127: 3287cf808 Migrate Reports pages to elevator themes
128: 5cca4857d = 128: 5cca4857d Migrate Admin/Scrips/index to elevator themes
129: d38e146cd = 129: d38e146cd Migrate Admin/Scrips/Create to elevator themes
130: ef2c1e2f4 = 130: ef2c1e2f4 Migrate Admin/Scrips/Modify to elevator themes
131: 71c8971a2 = 131: 71c8971a2 Migrate Admin/Scrips/Objects to elevator themes
132: b487bd5e5 = 132: b487bd5e5 Migrate Admin/Actions/Display to elevator themes
133: f1112cfd9 = 133: f1112cfd9 Update asset CSS and JS files for elevator theme
134: 96287645d = 134: 96287645d Update asset display components for elevator theme
135: 9317af1b2 = 135: 9317af1b2 Update asset create/modify components for elevator theme
136: edb9d71e1 = 136: edb9d71e1 Update asset search components for elevator theme
137: 1983b0460 = 137: 1983b0460 Migrate Admin/Actions/Create to elevator themes
138: 93ba4a292 = 138: 93ba4a292 Migrate Admin/Actions/Modify to elevator themes
139: be2c9fbaa = 139: be2c9fbaa Migrate Admin/Conditions/Create to elevator themes
140: 440891534 = 140: 440891534 Migrate Admin/Conditions/Modify to elevator themes
141: c9d4607cb = 141: c9d4607cb Migrate Admin/Conditions/Display to elevator themes
142: ee901eaee = 142: ee901eaee Set root font size to 13px for elevator themes
143: 91a00487d = 143: 91a00487d Smaller padding of table cells
144: c5926edf0 = 144: c5926edf0 Update README for third-party libraries we use for elevator themes
145: 040a1753c = 145: 040a1753c Migrate Admin/Queues/index to elevator themes
146: c38a865b0 = 146: c38a865b0 Migrate Admin/Queues/DefaultValues to elevator themes
147: 38f6769b3 = 147: 38f6769b3 Migrate Admin/Queues/GroupRights to elevator themes
148: e3bea7a0e = 148: e3bea7a0e Migrate Admin/Queues/People to elevator themes
149: 718b40ecd = 149: 718b40ecd Migrate Admin/Queues/Templates to elevator themes
150: 36cc62403 = 150: 36cc62403 Migrate Admin/Queues/Template to elevator themes
151: 4e1a6f49c = 151: 4e1a6f49c  Migrate Admin/Queues/UserRights to elevator themes
152: feda57066 = 152: feda57066 Migrate Admin/Queues/Modify to elevator themes
153: 9a8faf24d = 153: 9a8faf24d Migrate Admin/Queues/Scrips to elevator themes
154: 3633771fd = 154: 3633771fd Migrate dashboards pages to elevator theme
155: c2c759bcc = 155: c2c759bcc Migrate /Dashboards/Subscription.html to elevator themes
156: 1af8daf08 = 156: 1af8daf08 Migrate login page to elevator theme
157: b07894c25 = 157: b07894c25 Fix a typo for css class list-group-borderless
158: bc2f1ee62 = 158: bc2f1ee62 Migrate admin custom roles pages to elevator theme
159: c336fd3bc = 159: c336fd3bc Migrate admin global rights pages to elevator themes
160: f2e1065f3 = 160: f2e1065f3 Migrate admin article topics to elevator themes
161: f2790eaa9 = 161: f2790eaa9 Migrate admin custom field modify pages to elevators
162: cbc683348 = 162: cbc683348 Migrate Admin/Users/index to elevator themes
163: 88e88305d = 163: 88e88305d Migrate Admin/Users/CustomFields to elevator themes
164: 59e133d18 = 164: 59e133d18 Migrate Admin/Users/DashboardsInMenu to elevator themes
165: 96dc2f3ef = 165: 96dc2f3ef Migrate Admin/Users/Keys to elevator themes
166: 0f5854a8f = 166: 0f5854a8f Migrate Admin/Users/Modify to elevator themes
167: aa193b3ec = 167: aa193b3ec Migrate Admin/Users/MyRT to elevator themes
168: e3a963616 = 168: e3a963616 Fix failing test
169: 034714f5f = 169: 034714f5f Add Inter font(web hinted) 3.5
170: 9a3818b06 = 170: 9a3818b06 Use Inter font for elevator themes
171: ba38c0810 = 171: ba38c0810 Migrate Admin/CustomFields/index to elevator themes
172: a268ff604 = 172: a268ff604 Migrate Admin/CustomFields/GroupRights to elevator themes
173: 1c1b38104 = 173: 1c1b38104 Migrate Admin/CustomFields/UserRights to elevator themes
174: a45fb96a2 = 174: a45fb96a2 Migrate Admin/Articles/Classes/index to elevator themes
175: c97747714 = 175: c97747714 Migrate Admin/Articles/Classes/Modify to elevator themes
176: ffa5da05f = 176: ffa5da05f Migrate Admin/Articles/Classes/GroupRights to elevator themes
177: 9067f8fbf = 177: 9067f8fbf Migrate Admin/Articles/Classes/Objects to elevator themes
178: 1e7580438 = 178: 1e7580438 Migrate Admin/Articles/Classes/UserRights to elevator themes
179: 603a37fc0 = 179: 603a37fc0 Migrate tools pages for elevator theme
180: adf04b399 = 180: adf04b399 Migrate Admin/Assets/Catalogs/Modify to elevator themes
181: 747db72ec = 181: 747db72ec Migrate Admin/Assets/Catalogs/CustomFields to elevator themes
182: 32f5757cd = 182: 32f5757cd Migrate Admin/Assets/Catalogs/DefaultValues to elevator themes
183: b5d9dc0fc = 183: b5d9dc0fc Migrate Admin/Assets/Catalogs/GroupRights to elevator themes
184: ffb3caddc = 184: ffb3caddc Migrate Admin/Assets/Catalogs/Roles to elevator themes
185: bc6c541ef = 185: bc6c541ef Migrate Admin/Assets/Catalogs/UserRights to elevator themes
186: 4759d3c48 = 186: 4759d3c48 Migrate Admin/Assets/Catalogs/index to elevator themes
187: 118631f5a = 187: 118631f5a Fix inter font URL on production mode
188: 39b73c679 = 188: 39b73c679 Migrate SelfService pages to elevator theme
189: 92fda6951 = 189: 92fda6951 Migrate approvlas page to elevator theme
190: b85bc73d9 = 190: b85bc73d9 Migrate /Admin/Tools/Shredder to elevator themes
191: 37a20a458 = 191: 37a20a458 Migrate Prefs pages for elevator theme
192: 85cd8950d = 192: 85cd8950d Migrate ticket pages to elevator theme
193: 073d492ce = 193: 073d492ce Migrate admin tools pages to elevator theme
194: 7cd33f045 = 194: 7cd33f045 Migrate articles index page and components to elevator theme
195: 547407bc6 = 195: 547407bc6 Migrate search pages to elevator theme
196: 078ec9fbe = 196: 078ec9fbe Migrate articles search pages to elevator theme
197: 0c73eae7d = 197: 0c73eae7d Migrate articles modify pages to elevator theme
198: 5f548f29c = 198: 5f548f29c Migrate articles display pages to elevator theme
199: ba9fd7584 = 199: ba9fd7584 Migrate articles extract pages to elevator theme
200: a02bdddfb = 200: a02bdddfb Migrate articles topics page to elevator theme
201: 43706267d = 201: 43706267d Migrate /Admin/Groups to the elevator theme
202: 58f26f500 = 202: 58f26f500 Migrate /Install to elevator themes
203: 374e629c6 ! 203: 8e4e0264e Core RT-Extension-GroupLinks
    @@ -15,6 +15,47 @@
      
      sub Table {'Groups'}
      
    +-
    ++sub ModifyLinkRight {'ModifyGroupLinks'}
    + 
    + use RT::Users;
    + use RT::GroupMembers;
    +@@
    + use RT::ACL;
    + use RT::CustomRole;
    + 
    ++require RT::URI::group;
    ++
    + __PACKAGE__->AddRight( Admin => AdminGroup           => 'Modify group metadata or delete group'); # loc
    + __PACKAGE__->AddRight( Admin => AdminGroupMembership => 'Modify group membership roster'); # loc
    + __PACKAGE__->AddRight( Staff => ModifyOwnMembership  => 'Join or leave group'); # loc
    +@@
    + __PACKAGE__->AddRight( Admin => CreateGroupDashboard => 'Create group dashboards'); # loc
    + __PACKAGE__->AddRight( Admin => ModifyGroupDashboard => 'Modify group dashboards'); # loc
    + __PACKAGE__->AddRight( Admin => DeleteGroupDashboard => 'Delete group dashboards'); # loc
    ++__PACKAGE__->AddRight( Staff => ModifyGroupLinks     => 'Modify group links' ); # loc
    + 
    + =head1 METHODS
    + 
    +@@
    +     return;
    + }
    + 
    ++=head2 URI
    ++
    ++Returns this group's URI
    ++
    ++=cut
    ++
    ++sub URI {
    ++    my $self = shift;
    ++    my $uri = RT::URI::group->new($self->CurrentUser);
    ++    return $uri->URIForObject($self);
    ++}
    ++
    + RT::Base->_ImportOverlays();
    + 
    + 1;
     
     diff --git a/lib/RT/Interface/Web/MenuBuilder.pm b/lib/RT/Interface/Web/MenuBuilder.pm
     --- a/lib/RT/Interface/Web/MenuBuilder.pm
    @@ -48,6 +89,442 @@
                  }
              }
          }
    +
    +diff --git a/lib/RT/URI/group.pm b/lib/RT/URI/group.pm
    +new file mode 100644
    +--- /dev/null
    ++++ b/lib/RT/URI/group.pm
    +@@
    ++# BEGIN BPS TAGGED BLOCK {{{
    ++#
    ++# COPYRIGHT:
    ++#
    ++# This software is Copyright (c) 1996-2019 Best Practical Solutions, LLC
    ++#                                          <sales at bestpractical.com>
    ++#
    ++# (Except where explicitly superseded by other copyright notices)
    ++#
    ++#
    ++# LICENSE:
    ++#
    ++# This work is made available to you under the terms of Version 2 of
    ++# the GNU General Public License. A copy of that license should have
    ++# been provided with this software, but in any event can be snarfed
    ++# from www.gnu.org.
    ++#
    ++# This work is distributed in the hope that it will be useful, but
    ++# WITHOUT ANY WARRANTY; without even the implied warranty of
    ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    ++# General Public License for more details.
    ++#
    ++# You should have received a copy of the GNU General Public License
    ++# along with this program; if not, write to the Free Software
    ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    ++# 02110-1301 or visit their web page on the internet at
    ++# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
    ++#
    ++#
    ++# CONTRIBUTION SUBMISSION POLICY:
    ++#
    ++# (The following paragraph is not intended to limit the rights granted
    ++# to you to modify and distribute this software under the terms of
    ++# the GNU General Public License and is only of importance to you if
    ++# you choose to contribute your changes and enhancements to the
    ++# community by submitting them to Best Practical Solutions, LLC.)
    ++#
    ++# By intentionally submitting any modifications, corrections or
    ++# derivatives to this work, or any other work intended for use with
    ++# Request Tracker, to Best Practical Solutions, LLC, you confirm that
    ++# you are the copyright holder for those contributions and you grant
    ++# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
    ++# 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 }}}
    ++
    ++use strict;
    ++use warnings;
    ++
    ++package RT::URI::group;
    ++use base qw/RT::URI::base/;
    ++
    ++require RT::Group;
    ++
    ++=head1 NAME
    ++
    ++RT::URI::group - Internal URIs for linking to an L<RT::Group>
    ++
    ++=head1 DESCRIPTION
    ++
    ++This class should rarely be used directly, but via L<RT::URI> instead.
    ++
    ++Represents, parses, and generates internal RT URIs such as:
    ++
    ++    group:42
    ++    group://example.com/42
    ++
    ++These URIs are used to link between objects in RT such as associating a group
    ++with another group.
    ++
    ++=head1 METHODS
    ++
    ++Much of the interface below is dictated by L<RT::URI> and L<RT::URI::base>.
    ++
    ++=head2 Scheme
    ++
    ++Return the URI scheme for groups
    ++
    ++=cut
    ++
    ++sub Scheme { "group" }
    ++
    ++=head2 LocalURIPrefix
    ++
    ++Returns the site-specific prefix for a local group URI
    ++
    ++=cut
    ++
    ++sub LocalURIPrefix {
    ++    my $self = shift;
    ++    return $self->Scheme . "://" . RT->Config->Get('Organization') . "/";
    ++}
    ++
    ++=head2 IsLocal
    ++
    ++Returns a true value, the grouup ID, if this object represents a local group,
    ++undef otherwise.
    ++
    ++=cut
    ++
    ++sub IsLocal {
    ++    my $self   = shift;
    ++    my $prefix = $self->LocalURIPrefix;
    ++    return $1 if $self->{uri} =~ /^\Q$prefix\E(\d+)/i;
    ++    return undef;
    ++}
    ++
    ++=head2 URIForObject RT::Group
    ++
    ++Returns the URI for a local L<RT::Group> object
    ++
    ++=cut
    ++
    ++sub URIForObject {
    ++    my $self = shift;
    ++    my $obj  = shift;
    ++    return $self->LocalURIPrefix . $obj->Id;
    ++}
    ++
    ++=head2 ParseURI URI
    ++
    ++Primarily used by L<RT::URI> to set internal state.
    ++
    ++Figures out from an C<group:> URI whether it refers to a local group and the
    ++group ID.
    ++
    ++Returns the group ID if local, otherwise returns false.
    ++
    ++=cut
    ++
    ++sub ParseURI {
    ++    my $self = shift;
    ++    my $uri  = shift;
    ++
    ++    my $scheme = $self->Scheme;
    ++
    ++    # canonicalize "42" and "group:42" -> group://example.com/42
    ++    if ($uri =~ /^(?:\Q$scheme\E:)?(\d+)$/i) {
    ++        $self->{'uri'} = $self->LocalURIPrefix . $1;
    ++    }
    ++    else {
    ++        $self->{'uri'} = $uri;
    ++    }
    ++
    ++    my $group = RT::Group->new( $self->CurrentUser );
    ++    if ( my $id = $self->IsLocal ) {
    ++        $group->Load($id);
    ++
    ++        if ($group->id) {
    ++            $self->{'object'} = $group;
    ++        } else {
    ++            RT->Logger->error("Can't load Group #$id by URI '$uri'");
    ++            return;
    ++        }
    ++    }
    ++    return $group->id;
    ++}
    ++
    ++=head2 Object
    ++
    ++Returns the object for this URI, if it's local. Otherwise returns undef.
    ++
    ++=cut
    ++
    ++sub Object {
    ++    my $self = shift;
    ++    return $self->{'object'};
    ++}
    ++
    ++=head2 HREF
    ++
    ++If this is a local group, return an HTTP URL for it.
    ++
    ++Otherwise, return its URI.
    ++
    ++=cut
    ++
    ++sub HREF {
    ++    my $self = shift;
    ++    if ($self->IsLocal and $self->Object) {
    ++        return RT->Config->Get('WebURL')
    ++#             . ( $self->CurrentUser->Privileged ? "" : "SelfService/" )
    ++#             . "Admin/Groups/Modify.html?id="
    ++             . "Group/Summary.html?id="
    ++             . $self->Object->Id;
    ++    } else {
    ++        return $self->URI;
    ++    }
    ++}
    ++
    ++=head2 AsString
    ++
    ++Returns a description of this object
    ++
    ++=cut
    ++
    ++sub AsString {
    ++    my $self = shift;
    ++    if ($self->IsLocal and $self->Object) {
    ++        my $object = $self->Object;
    ++        if ( $object->Name ) {
    ++            return $self->loc('[_1] (Group #[_2])', $object->Name, $object->id);
    ++        } else {
    ++            return $self->loc('Group #[_1]', $object->id);
    ++        }
    ++    } else {
    ++        return $self->SUPER::AsString(@_);
    ++    }
    ++}
    ++
    ++1;
    +
    +diff --git a/lib/RT/URI/user.pm b/lib/RT/URI/user.pm
    +new file mode 100644
    +--- /dev/null
    ++++ b/lib/RT/URI/user.pm
    +@@
    ++# BEGIN BPS TAGGED BLOCK {{{
    ++#
    ++# COPYRIGHT:
    ++#
    ++# This software is Copyright (c) 1996-2016 Best Practical Solutions, LLC
    ++#                                          <sales at bestpractical.com>
    ++#
    ++# (Except where explicitly superseded by other copyright notices)
    ++#
    ++#
    ++# LICENSE:
    ++#
    ++# This work is made available to you under the terms of Version 2 of
    ++# the GNU General Public License. A copy of that license should have
    ++# been provided with this software, but in any event can be snarfed
    ++# from www.gnu.org.
    ++#
    ++# This work is distributed in the hope that it will be useful, but
    ++# WITHOUT ANY WARRANTY; without even the implied warranty of
    ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    ++# General Public License for more details.
    ++#
    ++# You should have received a copy of the GNU General Public License
    ++# along with this program; if not, write to the Free Software
    ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    ++# 02110-1301 or visit their web page on the internet at
    ++# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
    ++#
    ++#
    ++# CONTRIBUTION SUBMISSION POLICY:
    ++#
    ++# (The following paragraph is not intended to limit the rights granted
    ++# to you to modify and distribute this software under the terms of
    ++# the GNU General Public License and is only of importance to you if
    ++# you choose to contribute your changes and enhancements to the
    ++# community by submitting them to Best Practical Solutions, LLC.)
    ++#
    ++# By intentionally submitting any modifications, corrections or
    ++# derivatives to this work, or any other work intended for use with
    ++# Request Tracker, to Best Practical Solutions, LLC, you confirm that
    ++# you are the copyright holder for those contributions and you grant
    ++# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
    ++# 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 }}}
    ++
    ++use strict;
    ++use warnings;
    ++
    ++package RT::URI::user;
    ++use base qw/RT::URI::base/;
    ++
    ++require RT::User;
    ++
    ++=head1 NAME
    ++
    ++RT::URI::user - Internal URIs for linking to an L<RT::User>
    ++
    ++=head1 DESCRIPTION
    ++
    ++This class should rarely be used directly, but via L<RT::URI> instead.
    ++
    ++Represents, parses, and generates internal RT URIs such as:
    ++
    ++    user:42
    ++    user://example.com/42
    ++
    ++These URIs are used to link between objects in RT such as referencing an RT user
    ++record from a ticket in the Links section.
    ++
    ++=head1 METHODS
    ++
    ++Much of the interface below is dictated by L<RT::URI> and L<RT::URI::base>.
    ++
    ++=head2 Scheme
    ++
    ++Return the URI scheme for groups
    ++
    ++=cut
    ++
    ++sub Scheme { "user" }
    ++
    ++=head2 LocalURIPrefix
    ++
    ++Returns the site-specific prefix for a local group URI
    ++
    ++=cut
    ++
    ++sub LocalURIPrefix {
    ++    my $self = shift;
    ++    return $self->Scheme . "://" . RT->Config->Get('Organization') . "/";
    ++}
    ++
    ++=head2 IsLocal
    ++
    ++Returns a true value, the grouup ID, if this object represents a local group,
    ++undef otherwise.
    ++
    ++=cut
    ++
    ++sub IsLocal {
    ++    my $self   = shift;
    ++    my $prefix = $self->LocalURIPrefix;
    ++    return $1 if $self->{uri} =~ /^\Q$prefix\E(\d+)/i;
    ++    return undef;
    ++}
    ++
    ++=head2 URIForObject RT::Group
    ++
    ++Returns the URI for a local L<RT::Group> object
    ++
    ++=cut
    ++
    ++sub URIForObject {
    ++    my $self = shift;
    ++    my $obj  = shift;
    ++    return $self->LocalURIPrefix . $obj->Id;
    ++}
    ++
    ++=head2 ParseURI URI
    ++
    ++Primarily used by L<RT::URI> to set internal state.
    ++
    ++Figures out from an C<user:> URI whether it refers to a local user and the
    ++user ID.
    ++
    ++Returns the user ID if local, otherwise returns false.
    ++
    ++=cut
    ++
    ++sub ParseURI {
    ++    my $self = shift;
    ++    my $uri  = shift;
    ++
    ++    my $scheme = $self->Scheme;
    ++
    ++    # canonicalize "42" and "user:42" -> user://example.com/42
    ++    if ($uri =~ /^(?:\Q$scheme\E:)?(\d+)$/i) {
    ++        $self->{'uri'} = $self->LocalURIPrefix . $1;
    ++    }
    ++    else {
    ++        $self->{'uri'} = $uri;
    ++    }
    ++
    ++    my $user = RT::User->new( $self->CurrentUser );
    ++    if ( my $id = $self->IsLocal ) {
    ++        $user->Load($id);
    ++
    ++        if ($user->id) {
    ++            $self->{'object'} = $user;
    ++        } else {
    ++            RT->Logger->error("Can't load User #$id by URI '$uri'");
    ++            return;
    ++        }
    ++    }
    ++    return $user->id;
    ++}
    ++
    ++=head2 Object
    ++
    ++Returns the object for this URI, if it's local. Otherwise returns undef.
    ++
    ++=cut
    ++
    ++sub Object {
    ++    my $self = shift;
    ++    return $self->{'object'};
    ++}
    ++
    ++=head2 HREF
    ++
    ++If this is a local group, return an HTTP URL for it.
    ++
    ++Otherwise, return its URI.
    ++
    ++=cut
    ++
    ++sub HREF {
    ++    my $self = shift;
    ++    if ($self->IsLocal and $self->Object) {
    ++        return RT->Config->Get('WebURL')
    ++             . "User/Summary.html?id="
    ++             . $self->Object->Id;
    ++    } else {
    ++        return $self->URI;
    ++    }
    ++}
    ++
    ++=head2 AsString
    ++
    ++Returns a description of this object
    ++
    ++=cut
    ++
    ++sub AsString {
    ++    my $self = shift;
    ++    if ($self->IsLocal and $self->Object) {
    ++        my $object = $self->Object;
    ++        if ( $object->Name ) {
    ++            return $self->loc('[_1] (User #[_2])', $object->Name, $object->id);
    ++        } else {
    ++            return $self->loc('User #[_1]', $object->id);
    ++        }
    ++    } else {
    ++        return $self->SUPER::AsString(@_);
    ++    }
    ++}
    ++
    ++1;
     
     diff --git a/share/html/Admin/Elements/AddLinks b/share/html/Admin/Elements/AddLinks
     new file mode 100644
204: b9a37fcc5 = 204: d6c8e668a Core RT-Extension-GroupSummary
205: 82bdce4f0 = 205: fbe61ddbb Core RT-Extension-GroupSelfService
206: 1b286eaf3 = 206: 4ad94f18c Add note to UPGRADING-4.6 for callback changes
207: 04f53b6e7 = 207: 0fb4bce62 Update test for new group nav links
208: afe9dbae6 = 208: 92392bd8c Add test for group summary
209: 845a72335 = 209: cef38282e Migrate RT-Extension-GroupSummary pages to elevator themes
210: ef740e84c = 210: dd3bd21d9 Migrate RT-Extension-GroupLinks pages to elevator themes



More information about the rt-commit mailing list