[Rt-commit] rt branch, 4.6/priority-as-string, updated. rt-4.4.2-97-g405c60c68
Michel Rodriguez
michel at bestpractical.com
Wed May 8 16:39:53 EDT 2019
The branch, 4.6/priority-as-string has been updated
via 405c60c68fa994aba89c43e292674bc094b9f9eb (commit)
from 4504c9ba4c554bf6130e92fdf30064b6ef27603d (commit)
Summary of changes:
etc/RT_Config.pm.in | 337 +++++++++++++++++++++--------
etc/RT_SiteConfig.pm | 35 ---
lib/RT/Config.pm | 107 +++++++++
lib/RT/Queue.pm | 12 +
lib/RT/Ticket.pm | 50 +++--
lib/RT/Transaction.pm | 2 +-
share/html/Admin/Queues/DefaultValues.html | 2 +
share/html/Elements/RT__Ticket/ColumnMap | 7 +-
share/html/Elements/SelectPriority | 24 +-
share/html/Search/Elements/PickBasics | 9 +-
10 files changed, 412 insertions(+), 173 deletions(-)
delete mode 100644 etc/RT_SiteConfig.pm
- Log -----------------------------------------------------------------
commit 405c60c68fa994aba89c43e292674bc094b9f9eb
Author: michel <michel at bestpractical.com>
Date: Wed May 8 12:35:17 2019 +0200
cored priority as string
adds final proposal for the feature:
Set($EnablePriorityAsString, 1);
Set(%PriorityAsString,
# default (for non specified queues)
Default => { Low => 0, Medium => 50, High => 100 },
# per queue priorities
General => { Low => 0, High => 1 },
# drop-downs will display in order Low/High/Medium
LHM => [ Low => 0, High => 100, Medium => 50 ],
# use numerical priorities
NumQueue => 0,
);
diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index 169d5e22a..dd892e2e0 100644
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -149,14 +149,8 @@ Set( @StaticRoots, () );
=back
-=head2 C<@ClearHash>
-Set this array for config values that should have the default hash keys completly removed in
-favor or new ones set in config.
-=cut
-
-Set(@ClearHash, qw/PriorityAsString/);
=head1 Database connection
@@ -1388,6 +1382,39 @@ Set ($DefaultSearchResultFormat, qq{
'<small>__LastUpdatedRelative__</small>',
'<small>__TimeLeft__</small>'});
+
+=item C<$UserTicketDataResultFormat>
+
+This is the format of ticket search result for "Download User Tickets" links. It
+defaults to C<DefaultSearchResultFormat> for privileged users and C<DefaultSelfServiceSearchResultFormat>
+for unprivileged users if it's not set.
+
+=cut
+
+Set($UserTicketDataResultFormat, undef );
+
+=item C<$UserDataResultFormat>
+
+This is the format of the user search result for "Download User Data" links.
+
+=cut
+
+Set($UserDataResultFormat, "'__id__', '__Name__', '__EmailAddress__', '__RealName__',\
+ '__NickName__', '__Organization__', '__HomePhone__', '__WorkPhone__',\
+ '__MobilePhone__', '__PagerPhone__', '__Address1__', '__Address2__',\
+ '__City__', '__State__','__Zip__', '__Country__', '__Gecos__', '__Lang__',\
+ '__Timezone__', '__FreeFormContactInfo__'");
+
+=item C<$UserTransactionDataResultFormat>
+
+This is the format of the user transaction search result for "Download User Transaction Data" links.
+
+=cut
+
+Set($UserTransactionDataResultFormat, "'__ObjectId__/TITLE:Ticket Id', '__id__', '__Created__', '__Description__',\
+ '__OldValue__', '__NewValue__', '__Content__'");
+
+
=item C<$DefaultSearchResultOrderBy>
What Tickets column should we order by for RT Ticket search results.
@@ -1487,6 +1514,23 @@ Set($SearchResultsAutoRedirect, 0);
=over 4
+=item C<$DisplayTotalTimeWorked>
+
+Set to 1 to display Total Time Worked in the Basics section.
+
+Total Time Worked is a dynamic value containing a sum of Time Worked for
+the parent and all child tickets. This value is generated when displaying
+the ticket and automatically updates when a child ticket is added or removed.
+Total Time Worked follows only parent/child link relationships. Tickets
+linked with depends-on or refers-to links are not included.
+
+Total Time Worked is also available as a column for reports generated with
+the Query Builder.
+
+=cut
+
+Set($DisplayTotalTimeWorked, 0);
+
=item C<$ShowMoreAboutPrivilegedUsers>
This determines if the 'More about requestor' box on
@@ -1581,8 +1625,11 @@ builder are replaced by text fields that autocomplete. This can
alleviate the sometimes huge owner list for installations where many
users have the OwnTicket right.
-Autocompleter is automatically turned on if list contains more than
-50 users, but penalty of executing potentially slow query is still paid.
+The Owner entry is automatically converted to an autocomplete box if the list
+of owners exceeds C<$DropdownMenuLimit> items. However, the query to generate
+the list of owners is still run and this can increase page load times. If
+your owner lists exceed the limit and you are using the autocomplete box, you
+can improve performance by explicitly setting C<$AutocompleteOwners>.
Drop down doesn't show unprivileged users. If your setup allows unprivileged
to own ticket then you have to enable autocompleting.
@@ -1591,6 +1638,22 @@ to own ticket then you have to enable autocompleting.
Set($AutocompleteOwners, 0);
+=item C<$DropdownMenuLimit>
+
+The Owner dropdown menu, used in various places in RT including the Query
+Builder and ticket edit pages, automatically changes from a dropdown menu to
+an autocomplete field once the menu holds more than the C<$DropdownMenuLimit>
+owners. Dropdown menus become more difficult to use when they contain a large
+number of values and the autocomplete textbox can be more usable.
+
+If you have very large numbers of users who can be owners, this can cause
+slow page loads on pages with an Owner selection. See L</$AutocompleteOwners>
+for a way to potentially speed up page loads.
+
+=cut
+
+Set($DropdownMenuLimit, 50);
+
=item C<$AutocompleteOwnersForSearch>
If set to 1, the owner drop-downs for the query builder are always
@@ -1722,6 +1785,94 @@ Set($HideUnsetFieldsOnDisplay, 0);
=back
+=item C<%EnablePriorityAsString>
+
+Set this to C<0> to disable string priorities and only use
+numerical ones
+
+=cut
+
+Set($EnablePriorityAsString, 1);
+
+=item C<%PriorityAsString>
+
+RT can assign a priority value to tickets. Priority is stored as an
+integer in the database, but RT supports mapping strings to numerical
+values.
+
+RT supports different priority string mappings for individual queues
+with C<%PriorityAsString>.
+
+For example, the default mapping is:
+
+ Set(%PriorityAsString,
+ Default => { Low => 0, Medium => 50, High => 100 },
+ )
+
+Use queue names as keys in this hash.
+
+Values in the hash define the mapping:
+
+=over 4
+
+=item
+
+C<0> sets the queue to use numerical priorities:
+
+ NumQueue => 0
+
+=item
+
+a hash C<< { string => numerical_value,... } >> maps each string to
+the numerical value:
+
+ QueueWith3Levels => { Low => 0, Medium => 50, High => 100 }
+
+=item
+
+an array C<< [ string => numerical_value, ... ] >> maps each string to
+the numerical value, and additionaly tells RT to display strings in the
+order they were given in drop-down menus:
+
+ Ordered => [ Low => 0, High => 100, Medium => 50 ]
+
+In this case the drop-down menus used to choose the priority in RT will
+display Low/High/Medium, in this order
+
+=back
+
+Tickets in queues that aren't defined in this hash will use the mapping
+defined for C<Default>.
+
+A complete exampl of per-queue priority strings:
+
+ Set(%PriorityAsString,
+ # all queues not listed here will use this mapping
+ Default => { Low => 0, Medium => 50, High => 100 },
+ #
+ General => { Low => 0, High => 1 },
+ ColorQueue => { Green => 0, Yellow => 50, Red => 100 },
+ # drop-downs will display in order Low/High/Medium
+ LHM => [ Low => 0, High => 100, Medium => 50 ],
+ # use numerical priorities
+ NumQueue => 0,
+ );
+
+Redefine C<%PriorityAsString> in C<RT_SiteConfig.pm> to set site
+priority strings.
+
+The default is 3 levels of priority: Low, Medium and High
+
+=cut
+
+ Set(%PriorityAsString,
+ Default => { Low => 0, Medium => 50, High => 100 },
+ );
+
+=back
+
+
+
=head2 Self Service Interface
The Self Service Interface is a view automatically presented to Unprivileged
@@ -1785,100 +1936,103 @@ access ticked displays.
Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
-=back
+=item C<$SelfServiceUserPrefs>
-=head2 Articles
+This option controls how the SelfService user preferences page is
+displayed. It accepts a string from one of the four possible modes
+below.
-=over 4
-
-=item C<$ArticleOnTicketCreate>
+=over
-Set this to 1 to display the Articles interface on the Ticket Create
-page in addition to the Reply/Comment page.
+=item C<edit-prefs> (the default)
-=cut
+When set to C<edit-prefs>, self service users will be able to update
+their Timezone and Language preference and update their password.
+This is the default behavior of RT.
-Set($ArticleOnTicketCreate, 0);
+=item C<view-info>
-=item C<$HideArticleSearchOnReplyCreate>
+When set to C<view-info>, users will have full access to all their
+user information stored in RT on a read-only page.
-Set this to 1 to hide the search and include boxes from the Article
-UI. This assumes you have enabled Article Hotlist feature, otherwise
-you will have no access to Articles.
+=item C<edit-prefs-view-info>
-=cut
+When set to C<edit-prefs-view-info>, users will have full access as in
+the C<view-info> option, but also will be able to update their Locale
+and password as in the default C<edit-prefs> option.
-Set($HideArticleSearchOnReplyCreate, 0);
+=item C<full-edit>
-=item C<$LinkArticlesOnInclude>
+When set to C<full-edit>, users will be able to fully view and update
+all of their stored RT user information.
-Set this to 0 to suppress the default behavior of automatically linking
-to Articles when they are included in a message.
+=back
=cut
-Set($LinkArticlesOnInclude, 1);
+Set($SelfServiceUserPrefs, 'edit-prefs');
-=item C<%NumericalPriority>
+=item C<$SelfServiceRequestUpdateQueue>
-Disable string priorities
+Set this to the name of the queue to use for tickets requesting updates
+to user infomation from Self Service users. Once it's set, a quick
+ticket create portlet will show up on Preferences page for self service
+users. This option is only available when $SelfServiceUserPrefs is set
+to 'view-info' or 'edit-prefs-view-info'.
- Set($NumericalPriority, 0);
+Self service users need the CreateTicket right on this queue to create
+a ticket.
=cut
-Set($NumericalPriority, 0);
+Set($SelfServiceRequestUpdateQueue, undef);
-=item C<%PriorityAsString>
+=item C<$SelfServiceDownloadUserData>
-RT can assign a priority value to tickets. Priority is stored as an
-integer in the database, but RT supports mapping strings to numerical
-values. For example, the default mapping is:
+Allow Self Service users to download their user information, ticket data,
+and transaction data as a .tsv file. When enabled, these options
+will appear in the self service interface at Logged in as > Preferences.
+Users also need the ModifySelf right to have access to this page.
- Set(%PriorityAsString, Low => 0, Medium => 50, High => 100);
+=cut
-Redefine C<%PriorityAsString> in C<RT_SiteConfig.pm> to set site
-priority strings.
+Set( $SelfServiceDownloadUserData, 0 );
-=cut
-Set(%PriorityAsString, Low => 0, Medium => 50, High => 100);
+=back
-=item C<%PriorityAsStringOrder>
+=head2 Articles
-Administrators can alter the order of priority strings as they appear
-in selection drop-downs with C<@PriorityStringOrder>. Administrators
-can also use this setting to limit the available priority strings on
-ticket update pages. When this options is defined, scrips and other RT
-code will still have access to all of the priority strings defined in
-C<%PriorityAsString>. To set a priority string order:
+=over 4
- Set(@PriorityAsStringOrder, qw(Low Medium High));
+=item C<$ArticleOnTicketCreate>
+
+Set this to 1 to display the Articles interface on the Ticket Create
+page in addition to the Reply/Comment page.
=cut
-=item C<%PriorityAsStringQueues>
+Set($ArticleOnTicketCreate, 0);
-RT supports different priority string mappings for individual queues
-with C<%PriorityAsStringQueues>. Use queue names as keys in this
-hash. Then define priority string-number hash maps for each queue's
-value. Tickets in queues that aren't defined in this hash will fall
-back to RT's numerical priorities.
+=item C<$HideArticleSearchOnReplyCreate>
-When C<%PriorityAsStringQueues> is set, RT ignores both
-C<%PriorityAsString> and C<@PriorityAsStringOrder>. Administrators do
-not need to define C<%PriorityAsStringQueues> or C<%PriorityAsString>
-when they set C<%PriorityAsStringQueues>.
+Set this to 1 to hide the search and include boxes from the Article
+UI. This assumes you have enabled Article Hotlist feature, otherwise
+you will have no access to Articles.
-To set per-queue priority strings:
+=cut
- Set(%PriorityAsStringQueues,
- General => { Low => 0, Medium => 50, High => 100 },
- Binary => { Low => 0, High => 10 },
- );
+Set($HideArticleSearchOnReplyCreate, 0);
+
+=item C<$LinkArticlesOnInclude>
+
+Set this to 0 to suppress the default behavior of automatically linking
+to Articles when they are included in a message.
=cut
+Set($LinkArticlesOnInclude, 1);
+
=back
=head1 Assets
@@ -2073,6 +2227,20 @@ Set($MessageBoxIncludeSignatureOnComment, 1);
=back
+=head2 Attach Files
+
+=over 4
+
+=item C<$PreferDropzone>
+
+By default, RT uses Dropzone to attach files if possible. If
+C<$PreferDropzone> is set to 0, RT will always use plain file inputs.
+
+=cut
+
+Set($PreferDropzone, 1);
+
+=back
=head2 Transaction display
@@ -2159,14 +2327,14 @@ Set($AlwaysDownloadAttachments, undef);
=item C<$AttachmentListCount>
-The number of attachments to display by default on ticket display and ticket
-reply pages. Attachments beyond this count will be displayed only after the
-user clicks a "Show all" link. The default value, C<undef>, means always show
+Sets the number of attachments to display on ticket display and ticket
+update pages (default is 5). Attachments beyond this number are displayed
+only after the user clicks the "Show all" link. Set to C<undef> to always show
all attachments. A value of C<0> means show no attachments by default.
=cut
-Set($AttachmentListCount, undef);
+Set($AttachmentListCount, 5);
=item C<$PreferRichText>
@@ -2180,6 +2348,9 @@ multiple vectors for XSS and phishing attacks. If
L</$TrustHTMLAttachments> is enabled, the original HTML is available for
viewing via the "Download" link.
+If the optional L<HTML::Gumbo> dependency is installed, RT will leverage
+this to allow a broader set of HTML through, including tables.
+
=cut
Set($PreferRichText, 1);
@@ -2733,35 +2904,9 @@ Set(@LexiconLanguages, qw(*));
An array that contains default encodings used to guess which charset
an attachment uses, if it does not specify one explicitly. All
-options must be recognized by L<Encode::Guess>.
-
-The first element may also be C<*>, which attempts encoding detection
-using L<Encode::Detect::Detector>. This uses Mozilla's character
-detection library to examine the bytes, and use frequency metrics to
-rank the options. This detection may fail (and fall back to other
-options in the C<@EmailInputEncodings> list) if no decoding has high
-enough confidence metrics. As of L<Encode::Detect::Detector> version
-1.01, it knows the following encodings:
-
- big5-eten
- cp1250
- cp1251
- cp1253
- cp1255
- cp855
- cp866
- euc-jp
- euc-kr
- euc-tw
- gb18030
- iso-8859-2
- iso-8859-5
- iso-8859-7
- iso-8859-11
- koi8-r
- MacCyrillic
- shiftjis
- utf-8
+options must be recognized by L<Encode::Guess>. The first element may
+also be '*', which enables encoding detection using
+L<Encode::Detect::Detector>, if installed.
=cut
diff --git a/etc/RT_SiteConfig.pm b/etc/RT_SiteConfig.pm
deleted file mode 100644
index 9944ebe97..000000000
--- a/etc/RT_SiteConfig.pm
+++ /dev/null
@@ -1,35 +0,0 @@
-use utf8;
-
-# Any configuration directives you include here will override
-# RT's default configuration file, RT_Config.pm
-#
-# To include a directive here, just copy the equivalent statement
-# from RT_Config.pm and change the value. We've included a single
-# sample value below.
-#
-# If this file includes non-ASCII characters, it must be encoded in
-# UTF-8.
-#
-# This file is actually a perl module, so you can include valid
-# perl code, as well.
-#
-# The converse is also true, if this file isn't valid perl, you're
-# going to run into trouble. To check your SiteConfig file, use
-# this command:
-#
-# perl -c /path/to/your/etc/RT_SiteConfig.pm
-#
-# You must restart your webserver after making changes to this file.
-#
-
-# You may also split settings into separate files under the etc/RT_SiteConfig.d/
-# directory. All files ending in ".pm" will be parsed, in alphabetical order,
-# after this file is loaded.
-
-Set( $rtname, 'example.com');
-
-# You must install Plugins on your own, this is only an example
-# of the correct syntax to use when activating them:
-# Plugin( "RT::Authen::ExternalAuth" );
-
-1;
diff --git a/lib/RT/Config.pm b/lib/RT/Config.pm
index 68ca885d4..c0cb7f570 100644
--- a/lib/RT/Config.pm
+++ b/lib/RT/Config.pm
@@ -1813,6 +1813,113 @@ sub EnableExternalAuth {
return;
}
+=head2 Methods for specific options
+
+=head2 PriorityMap( <optional_queue_name>)
+
+Returns a hash ref C<< { <priority_as_string> => <priority_value>, ... } >>
+
+If no queue name is given uses the configuration for C<'Default'>.
+
+If the queue has no C<PriorityAsString> option, uses the one for C<'Default'>.
+
+Returns C<undef> if C<EnablePriorityAsString> is set to 0, if the
+queue has C<PriorityAsString> switched off (by setting it to C<0>) or if no
+map is available.
+
+Logs an error if a PriorityAsString is found but it is neither a hash nor an
+array, nor 0.
+
+=cut
+
+sub PriorityMap
+ { my $self = shift;
+ my $queue = shift || 'Default';
+
+ my $option = $self->_get_PriorityAsString_for_queue( $queue );
+ return undef if ! $option;
+
+ my $map;
+ if ( ref $option eq 'HASH' ) {
+ # regular map
+ $map = $option
+ } elsif ( ref $option eq 'ARRAY' ) {
+ # order is irrelevent here, load the array as a hash
+ $map = { @$option };
+ } else {
+ # try to diagnose the problem by showing some details about the map
+ # note: this could also be done when the config is loaded
+
+ # where was the map defined
+ my $queues= $self->Get('PriorityAsString');
+ my $real_queue = defined $queues->{$queue} ? "queue $queue"
+ : defined $queues->{Default} ? 'Default queue'
+ : 'cannot happen';
+
+ # what's in the map definition
+ my $option_desc = ref $option ? "map is a " . ref( $option)
+ : length $option < 20 ? $option
+ : substr( $option, 0, 17) . '...';
+
+ $RT::Logger->error("Wrong priority map for $real_queue: $option_desc");
+ return undef;
+ }
+ return $map;
+ }
+
+=head2 PriorityMapOrder( <optional_queue_name>)
+
+Returns an array of priority strings, in the proper order for display.
+
+The order is either given in the C<PriorityAsString> option by using an
+array for the queue, or is based on the numerical values of the options
+(lower values first).
+
+=cut
+
+sub PriorityMapOrder
+ { my $self = shift;
+ my $queue = shift || 'Default';
+
+ my $option = $self->_get_PriorityAsString_for_queue( $queue );
+ return undef if ! $option;
+
+ my @ordered;
+ if ( ref $option eq 'HASH' ) {
+ # hash: sort it on the value
+ @ordered = sort { $option->{$a} <=> $option->{$b} } keys %$option
+ } elsif ( ref $option eq 'ARRAY' ) {
+ # array: use the array order, extract every other element
+ foreach( my $i=0; $i<@$option; $i+=2) {
+ push @ordered, $option->[$i];
+ }
+ } else {
+ return undef;
+ }
+
+ return \@ordered;
+
+ }
+
+# internal method, _get_PriorityAsString_for_queue( <queue name> )
+# returns
+
+sub _get_PriorityAsString_for_queue
+ { my $self = shift;
+ my $queue = shift;
+
+ return undef if ! $self->Get( 'EnablePriorityAsString' );
+
+ my $queues = $self->Get( 'PriorityAsString' );
+ return undef if ! $queues;
+
+ my $map = defined $queues->{$queue} ? $queues->{$queue}
+ : defined $queues->{Default}? $queues->{Default}
+ : undef;
+
+ return $map;
+ }
+
RT::Base->_ImportOverlays();
1;
diff --git a/lib/RT/Queue.pm b/lib/RT/Queue.pm
index 4c2f5fb62..f7418f577 100644
--- a/lib/RT/Queue.pm
+++ b/lib/RT/Queue.pm
@@ -772,6 +772,7 @@ sub _Set {
$args{'TransactionType'} = ($args{'Value'} == 1) ? "Disabled" : "Enabled";
delete $args{'Field'};
}
+
my ( undef, undef, $TransObj ) = $self->_NewTransaction(
Type => $args{'TransactionType'},
Field => $args{'Field'},
@@ -1194,6 +1195,11 @@ sub SetDefaultValue {
},
);
+ if( $args{Name}=~ /^(Initial|Final)Priority/ ) {
+ $old_value= $self->_PriorityAsString( $old_value );
+ $new_value= $self->_PriorityAsString( $new_value );
+ }
+
if ( $ret ) {
return ( $ret, $self->loc( 'Default value of [_1] changed from [_2] to [_3]', $args{Name}, $old_value, $new_value ) );
}
@@ -1202,6 +1208,12 @@ sub SetDefaultValue {
}
}
+sub _PriorityAsString {
+ my( $self, $priority)= @_;
+ my $map = RT->Config->PriorityMap( $self->Name );
+ return RT::Ticket->_PriorityAsString( $priority, $map );
+}
+
sub SLA {
my $self = shift;
my $value = shift;
diff --git a/lib/RT/Ticket.pm b/lib/RT/Ticket.pm
index 0b1e5fdc7..290280f5e 100644
--- a/lib/RT/Ticket.pm
+++ b/lib/RT/Ticket.pm
@@ -2801,10 +2801,18 @@ sub _Set {
return ( $ret, $msg ) unless $args{'RecordTransaction'};
my $trans;
+
+ my $New= $args{'Value'};
+ # *Priority fields may need to be translated
+ if( $args{'Field'} =~ m{^(Initial|Final)?Priority$}) {
+ $Old= $self->_PriorityAsString( $Old );
+ $New= $self->_PriorityAsString( $New );
+ }
+
( $ret, $msg, $trans ) = $self->_NewTransaction(
Type => $args{'TransactionType'},
Field => $args{'Field'},
- NewValue => $args{'Value'},
+ NewValue => $New,
OldValue => $Old,
TimeTaken => $args{'TimeTaken'},
);
@@ -3706,7 +3714,7 @@ sub Serialize {
# Returns String: Various Ticket Priorities as either a string or integer
sub PriorityAsString {
my $self = shift;
- return $self->_PriorityAsString($self->Priority);
+ return $self->_PriorityAsString( $self->Priority );
}
sub InitialPriorityAsString {
@@ -3724,26 +3732,32 @@ sub _PriorityAsString {
my $priority = shift;
return undef unless defined $priority && length $priority;
- my %map;
- my $queues = RT->Config->Get('PriorityAsStringQueues');
- if (@_) {
- %map = %{ shift(@_) };
- } elsif ($queues and $queues->{$self->QueueObj->Name}) {
- %map = %{ $queues->{$self->QueueObj->Name} };
- } else {
- %map = RT->Config->Get('PriorityAsString');
+ my $map;
+ if( @_ ) {
+ $map = shift;
+ } else {
+ my $queue_name = $self->QueueObj->Name;
+ $map = RT->Config->PriorityMap( $queue_name);
}
- # Count from high down to low until we find one that our number is
- # greater than or equal to.
- if ( values %map ) {
- foreach my $label ( sort { $map{$b} <=> $map{$a} } keys %map ) {
- return $label if $priority >= $map{ $label };
- };
- }
- return "unknown";
+ return $priority if ! $map;
+
+ use DDP; warn "map:\n"; p $map; warn "priority: "; p $priority;
+
+
+ my @orderedLabels = sort { $map->{$b} <=> $map->{$a} } keys %$map;
+
+ # return the label for the first priority <= $priority
+ foreach my $label ( @orderedLabels ) {
+ return $label if $priority >= $map->{ $label };
+ };
+ # if we get here the priority is lower than the lowest in the map
+ # return the label associated with the lowest priority
+ return $orderedLabels[-1];
+
}
+
RT::Base->_ImportOverlays();
1;
diff --git a/lib/RT/Transaction.pm b/lib/RT/Transaction.pm
index bddf36b22..b7ab2d5f4 100644
--- a/lib/RT/Transaction.pm
+++ b/lib/RT/Transaction.pm
@@ -915,7 +915,7 @@ sub _CanonicalizeRoleName {
# Generic:
my $no_value = $self->loc("(no value)");
return (
- "[_1] changed from [_2] to [_3]",
+ "[_1] changed from [_2] to [_3] XXX",
$self->Field,
( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ),
"'" . $self->NewValue . "'"
diff --git a/share/html/Admin/Queues/DefaultValues.html b/share/html/Admin/Queues/DefaultValues.html
index aff93cc0b..aec3ce4eb 100644
--- a/share/html/Admin/Queues/DefaultValues.html
+++ b/share/html/Admin/Queues/DefaultValues.html
@@ -59,11 +59,13 @@
<td><& /Elements/SelectPriority,
Name => "InitialPriority",
Default => $queue->DefaultValue('InitialPriority'),
+ QueueObj => $queue,
&></td></tr>
<tr><td class="label"><&|/l&>Final Priority</&>:</td>
<td><& /Elements/SelectPriority,
Name => "FinalPriority",
Default => $queue->DefaultValue('FinalPriority'),
+ QueueObj => $queue,
&><br /><span><em><&|/l&>requires running rt-crontool</&></em></span></td></tr>
<& /Elements/EditCustomFields,
Object => RT::Ticket->new($session{CurrentUser}),
diff --git a/share/html/Elements/RT__Ticket/ColumnMap b/share/html/Elements/RT__Ticket/ColumnMap
index 0a3390d41..c336a2ac3 100644
--- a/share/html/Elements/RT__Ticket/ColumnMap
+++ b/share/html/Elements/RT__Ticket/ColumnMap
@@ -366,6 +366,8 @@ my $printer = sub {
return \( qq{<span class="ticket-info-$class-}. lc($escaped) .qq{">$loc_escaped</span>} );
};
+my $queues = RT->Config->Get('PriorityAsString') || {};
+
foreach my $field (qw(Priority InitialPriority FinalPriority)) {
$COLUMN_MAP->{ $field .'Number' } ||= $COLUMN_MAP->{ $field };
@@ -374,14 +376,13 @@ foreach my $field (qw(Priority InitialPriority FinalPriority)) {
my $method = $field .'AsString';
- my %queues = RT->Config->Get('PriorityAsStringQueues') || ();
- if (not keys %queues) {
+ if (not keys %$queues) {
$COLUMN_MAP->{ $field }{'value'} = sub {
return $printer->( $class, $_[0]->$method() );
};
} else {
$COLUMN_MAP->{ $field }{'value'} = sub {
- return $queues{$_[0]->QueueObj->Name}
+ return $queues->{$_[0]->QueueObj->Name}
? $printer->( $class, $_[0]->$method() )
: $_[0]->$field;
};
diff --git a/share/html/Elements/SelectPriority b/share/html/Elements/SelectPriority
index f09b0d5de..a724e4a95 100644
--- a/share/html/Elements/SelectPriority
+++ b/share/html/Elements/SelectPriority
@@ -78,24 +78,16 @@ my @order;
my $default_label = '';
my %map = ();
-if ($PriorityStringMap) {
- %map = %{$PriorityStringMap};
-} elsif ($QueueObj and ! RT->Config->Get('NumericalPriority')) {
- my %config = RT->Config->Get('PriorityAsStringQueues') ? RT->Config->Get('PriorityAsStringQueues') : ();
- %map = %config && $config{$QueueObj->Name} ? %{$config{$QueueObj->Name}} : RT->Config->Get('PriorityAsString');
-}
-
-if (%map) {
- if (RT->Config->Get('PriorityAsStringOrder')) {
- @order = grep {exists $map{$_}} RT->Config->Get('PriorityAsStringOrder');
- } else {
- @order = sort { $map{$a} <=> $map{$b} } keys %map;
- }
-
- if ( defined $Default && length $Default ) {
- $default_label = RT::Ticket->_PriorityAsString( $Default, \%map ) || '';
+if( $QueueObj ) {
+ if( my $map = RT->Config->PriorityMap( $QueueObj->Name ) ) {
+ %map = %$map;
+ @order = @{RT->Config->PriorityMapOrder( $QueueObj->Name)};
+ if ( defined $Default && length $Default ) {
+ $default_label = RT::Ticket->_PriorityAsString( $Default, \%map ) || '';
+ }
}
}
+
$Default = '' unless defined $Default;
</%INIT>
diff --git a/share/html/Search/Elements/PickBasics b/share/html/Search/Elements/PickBasics
index 682058d01..068c829cd 100644
--- a/share/html/Search/Elements/PickBasics
+++ b/share/html/Search/Elements/PickBasics
@@ -223,13 +223,14 @@ my @lines = (
},
);
-my %priority_strings = RT->Config->Get('PriorityAsStringQueues') || ();
-if ( !RT->Config->Get('NumericalPriority') ) {
+
+if ( RT->Config->Get('EnablePriorityAsString') ) {
my ($priority_dropdown) = grep {$_->{Name} eq "Priority"} @lines;
my %priority_map = ( '-' => '' );
for my $queue (keys %queues) {
- for my $priority (keys %{$priority_strings{$queue}}) {
- $priority_map{ keys %queues > 1 ? "$queue: $priority" : "$priority" } = $priority_strings{$queue}{$priority};
+ my $queue_priority_map= RT::Config->PriorityMap( $queue);
+ for my $priority ( keys %$queue_priority_map ) {
+ $priority_map{ keys %queues > 1 ? "$queue: $priority" : "$priority" } = $queue_priority_map->{$priority};
}
}
$priority_dropdown->{Value}{Arguments}{PriorityStringMap} = \%priority_map;
-----------------------------------------------------------------------
More information about the rt-commit
mailing list