[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