[Rt-commit] rt branch, 4.6/configindatabase-themed, repushed

? sunnavy sunnavy at bestpractical.com
Fri Dec 13 16:33:09 EST 2019


The branch 4.6/configindatabase-themed was deleted and repushed:
       was fab269a7fc423df51d018d95177559ef389b626a
       now d7f67c7c8c61b7fa39392a6eb476ec8da17bc855

 1: b28dc30467 =  1: 72a9963d8e Allow specifying size for Integer and String widgets
 2: 94744da2c6 =  2: 52a50790de Allow String widget to have a value of "0"
 3: 59334314c9 =  3: f9d93d2b91 Add RadioStyle option to Boolean widget
 4: 534bba3102 =  4: 104816aca3 Make booleans with RadioStyle use true/false logic
 5: baf23200cd !  5: 743a9470d0 DatabaseSetting schema updates
    @@ -115,10 +115,10 @@
     +CREATE INDEX DatabaseSettings2 ON DatabaseSettings (Disabled);
     +
     
    -diff --git a/etc/upgrade/4.5.0/acl.Pg b/etc/upgrade/4.5.0/acl.Pg
    -new file mode 100644
    ---- /dev/null
    -+++ b/etc/upgrade/4.5.0/acl.Pg
    +diff --git a/etc/upgrade/4.5.1/acl.Pg b/etc/upgrade/4.5.1/acl.Pg
    +new file mode 100644
    +--- /dev/null
    ++++ b/etc/upgrade/4.5.1/acl.Pg
     @@
     +sub acl {
     +    my $dbh = shift;
    @@ -151,11 +151,11 @@
     +1;
     +
     
    -diff --git a/etc/upgrade/4.5.0/schema.Oracle b/etc/upgrade/4.5.0/schema.Oracle
    ---- a/etc/upgrade/4.5.0/schema.Oracle
    -+++ b/etc/upgrade/4.5.0/schema.Oracle
    -@@
    - ALTER TABLE Classes DROP( HotList );
    +diff --git a/etc/upgrade/4.5.1/schema.Oracle b/etc/upgrade/4.5.1/schema.Oracle
    +new file mode 100644
    +--- /dev/null
    ++++ b/etc/upgrade/4.5.1/schema.Oracle
    +@@
     +CREATE SEQUENCE DatabaseSettings_seq;
     +CREATE TABLE DatabaseSettings (
     +    id              NUMBER(11,0)    CONSTRAINT DatabaseSettings_key PRIMARY KEY,
    @@ -172,11 +172,11 @@
     +CREATE UNIQUE INDEX DatabaseSettings1 ON DatabaseSettings (LOWER(Name));
     +CREATE INDEX DatabaseSettings2 ON DatabaseSettings (Disabled);
     
    -diff --git a/etc/upgrade/4.5.0/schema.Pg b/etc/upgrade/4.5.0/schema.Pg
    ---- a/etc/upgrade/4.5.0/schema.Pg
    -+++ b/etc/upgrade/4.5.0/schema.Pg
    -@@
    - ALTER TABLE Classes DROP COLUMN HotList;
    +diff --git a/etc/upgrade/4.5.1/schema.Pg b/etc/upgrade/4.5.1/schema.Pg
    +new file mode 100644
    +--- /dev/null
    ++++ b/etc/upgrade/4.5.1/schema.Pg
    +@@
     +CREATE SEQUENCE databasesettings_id_seq;
     +CREATE TABLE DatabaseSettings (
     +    id                integer         DEFAULT nextval('databasesettings_id_seq'),
    @@ -194,10 +194,10 @@
     +CREATE UNIQUE INDEX DatabaseSettings1 ON DatabaseSettings (LOWER(Name));
     +CREATE INDEX DatabaseSettings2 ON DatabaseSettings (Disabled);
     
    -diff --git a/etc/upgrade/4.5.0/schema.SQLite b/etc/upgrade/4.5.0/schema.SQLite
    -new file mode 100644
    ---- /dev/null
    -+++ b/etc/upgrade/4.5.0/schema.SQLite
    +diff --git a/etc/upgrade/4.5.1/schema.SQLite b/etc/upgrade/4.5.1/schema.SQLite
    +new file mode 100644
    +--- /dev/null
    ++++ b/etc/upgrade/4.5.1/schema.SQLite
     @@
     +CREATE TABLE DatabaseSettings (
     +    id                INTEGER PRIMARY KEY,
    @@ -215,11 +215,11 @@
     +CREATE INDEX DatabaseSettings2 ON DatabaseSettings (Disabled);
     +
     
    -diff --git a/etc/upgrade/4.5.0/schema.mysql b/etc/upgrade/4.5.0/schema.mysql
    ---- a/etc/upgrade/4.5.0/schema.mysql
    -+++ b/etc/upgrade/4.5.0/schema.mysql
    -@@
    - ALTER TABLE Classes DROP COLUMN HotList;
    +diff --git a/etc/upgrade/4.5.1/schema.mysql b/etc/upgrade/4.5.1/schema.mysql
    +new file mode 100644
    +--- /dev/null
    ++++ b/etc/upgrade/4.5.1/schema.mysql
    +@@
     +CREATE TABLE DatabaseSettings (
     +    id                int(11)         NOT NULL AUTO_INCREMENT,
     +    Name              varchar(255)    NOT NULL,
 6: a888aa6cb0 =  6: e5fd89ab5a Add ORM classes for DatabaseSettings
 7: 05db0b9b37 =  7: 2360f7b0e2 Port database config loading and refreshing from extension
 8: 7648dd10f1 =  8: 1bbe235113 Add Code and MultilineString widgets
 9: 21f6abfb8c =  9: 8bcdbc4b32 Port EditConfig page from extension
10: 165422a396 = 10: 8d42c4038e Annotate Immutable options
11: f2f0b772d7 ! 11: bd905f94e8 Add widget metadata for config options
    @@ -193,6 +193,9 @@
     +    ArticleOnTicketCreate => {
     +        Widget => '/Widgets/Form/Boolean',
     +    },
    ++    AutoCreateNonExternalUsers => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
     +    AutocompleteOwnersForSearch => {
     +        Widget => '/Widgets/Form/Boolean',
     +    },
    @@ -324,6 +327,176 @@
     +    },
     +    ValidateUserEmailAddresses => {
     +        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebFallbackToRTLogin => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebFlushDbCacheEveryRequest => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebHttpOnlyCookies => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebRemoteUserAuth => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebRemoteUserAutocreate => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebRemoteUserContinuous => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebRemoteUserGecos => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WebSecureCookies => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    WikiImplicitLinks => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    HideOneTimeSuggestions => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    LinkArticlesOnInclude => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    SelfServiceCorrespondenceOnly => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    ShowSearchResultCount => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++    AllowGroupAutocompleteForUnprivileged => {
    ++        Widget => '/Widgets/Form/Boolean',
    ++    },
    ++
    ++    AttachmentListCount => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    AutoLogoff => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    BcryptCost => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    DefaultSummaryRows => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    ExternalStorageCutoffSize => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    LogoutRefresh => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    MaxAttachmentSize => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    MaxFulltextAttachmentSize => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    MinimumPasswordLength => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    MoreAboutRequestorGroupsLimit => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++    TicketsItemMapSize => {
    ++        Widget => '/Widgets/Form/Integer',
    ++    },
    ++
    ++    CanonicalizeEmailAddressMatch => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    CanonicalizeEmailAddressReplace => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    CommentAddress => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    CorrespondAddress => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    DashboardAddress => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    DashboardSubject => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    DefaultErrorMailPrecedence => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    DefaultMailPrecedence => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    DefaultSearchResultOrderBy => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    EmailSubjectTagRegex => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    EmailOutputEncoding => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    FriendlyFromLineFormat => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    FriendlyToLineFormat => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPHost => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPUser => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPPassword => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPFilter => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPGroupBase => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LDAPGroupFilter => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LogDir => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LogToFileNamed => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LogoAltText => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LogoLinkURL => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    LogoURL => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    OwnerEmail => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    RedistributeAutoGeneratedMessages => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    SendmailArguments => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    SendmailBounceArguments => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    SendmailPath => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    SetOutgoingMailFrom => {
    ++        Widget => '/Widgets/Form/String',
    ++    },
    ++    Timezone => {
    ++        Widget => '/Widgets/Form/String',
     +    },
     +    VERPPrefix => {
     +        Widget => '/Widgets/Form/String',
    @@ -334,146 +507,6 @@
     +        WidgetArguments => {
     +            Callback => sub {  return { Hints => RT->Config->Get( 'Organization') } },
     +        },
    -+    },
    -+    WebFallbackToRTLogin => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebFlushDbCacheEveryRequest => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebHttpOnlyCookies => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebRemoteUserAuth => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebRemoteUserAutocreate => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebRemoteUserContinuous => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebRemoteUserGecos => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WebSecureCookies => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    WikiImplicitLinks => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    HideOneTimeSuggestions => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    LinkArticlesOnInclude => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    SelfServiceCorrespondenceOnly => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+    ShowSearchResultCount => {
    -+        Widget => '/Widgets/Form/Boolean',
    -+    },
    -+
    -+    AttachmentListCount => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    AutoLogoff => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    BcryptCost => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    DefaultSummaryRows => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    ExternalStorageCutoffSize => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    LogoutRefresh => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    MaxAttachmentSize => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    MaxFulltextAttachmentSize => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    MinimumPasswordLength => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    MoreAboutRequestorGroupsLimit => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+    TicketsItemMapSize => {
    -+        Widget => '/Widgets/Form/Integer',
    -+    },
    -+
    -+    CommentAddress => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    CorrespondAddress => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    DashboardAddress => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    DashboardSubject => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    DefaultErrorMailPrecedence => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    DefaultMailPrecedence => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    DefaultSearchResultOrderBy => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    EmailOutputEncoding => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    FriendlyFromLineFormat => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    FriendlyToLineFormat => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    LogDir => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    LogToFileNamed => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    LogoAltText => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    LogoLinkURL => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    LogoURL => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    OwnerEmail => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    RedistributeAutoGeneratedMessages => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    SendmailArguments => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    SendmailBounceArguments => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    SendmailPath => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    SetOutgoingMailFrom => {
    -+        Widget => '/Widgets/Form/String',
    -+    },
    -+    Timezone => {
    -+        Widget => '/Widgets/Form/String',
     +    },
     +    WebImagesURL => {
     +        Widget => '/Widgets/Form/String',
12: 5803325e5f = 12: d09c8c5d0c Hide deprecated options
13: b878fb9786 = 13: 82b5fed83f List Database as source of configuration on Sys Config page
14: 02b6a1a9fb = 14: 05fe630f98 Render config with EditLink as readonly
15: 94cbaf03d2 = 15: 35c5c88e5a Switch from Storable::dclone to Clone::clone to handle code/regex
16: c0d5683bfb = 16: c9d0c67172 Migrate MultilineString to new themes
17: 941e99b3ba = 17: 952b66e3f4 Add LabelLink support for form widgets
18: dbb1df6f1e ! 18: 178402c5a8 Vertically align boolean label/value
    @@ -19,7 +19,7 @@
     --- a/share/static/css/elevator-light/forms.css
     +++ b/share/static/css/elevator-light/forms.css
     @@
    -   margin-top: 0;
    +   padding-bottom: 0.25em;
      }
      
     +.form-row.boolean > .value .form-row {
19: 6c337ce659 ! 19: f74dfba737 Add tabs to the Configuration in DB feature
    @@ -283,7 +283,7 @@
     +% if ($widget eq '/Widgets/Form/MultilineString' || $widget eq '/Widgets/Form/Code') {
     +<% $row_start |n %><textarea disabled class="<% $is_code ? 'code' : '' %> form-control" rows="6" cols="80"><% $current_value %></textarea><br />
     +% } else {
    -+<% $row_start |n %><input type="text" disabled width="80" value="<% $current_value %>" class="form-control" /><br/>
    ++<% $row_start |n %><input type="text" disabled value="<% $current_value %>" class="form-control" /><br/>
     +% }
     +<&|/l_unsafe, "<a href=\"$meta->{EditLink}\">", loc($meta->{EditLinkLabel}), "</a>" &>Visit [_1][_2][_3] to manage this setting</&>
     +% } elsif ( $name =~ /Plugins/) {
    @@ -298,7 +298,7 @@
     +% if ($widget eq '/Widgets/Form/MultilineString' || $widget eq '/Widgets/Form/Code') {
     +<% $row_start |n %><textarea disabled class="<% $is_code ? 'code' : '' %> form-control" rows="6" cols="80"><% $current_value %></textarea>
     +% } else {
    -+<% $row_start |n %><input type="text" disabled width="80" value="<% $current_value %>" class="form-control" />
    ++<% $row_start |n %><input type="text" disabled value="<% $current_value %>" class="form-control" />
     +% }
     +<br /><em><% loc('Must modify in config file' ) %></em>
     +<% $row_end |n %>
20: de365025c8 ! 20: 3d04bac2dc Rename DatabaseSetting to Configuration
    @@ -117,9 +117,9 @@
     +CREATE INDEX Configurations2 ON Configurations (Disabled);
      
     
    -diff --git a/etc/upgrade/4.5.0/acl.Pg b/etc/upgrade/4.5.0/acl.Pg
    ---- a/etc/upgrade/4.5.0/acl.Pg
    -+++ b/etc/upgrade/4.5.0/acl.Pg
    +diff --git a/etc/upgrade/4.5.1/acl.Pg b/etc/upgrade/4.5.1/acl.Pg
    +--- a/etc/upgrade/4.5.1/acl.Pg
    ++++ b/etc/upgrade/4.5.1/acl.Pg
     @@
      
          my @acls;
    @@ -132,11 +132,10 @@
      
          my $db_user = RT->Config->Get('DatabaseUser');
     
    -diff --git a/etc/upgrade/4.5.0/schema.Oracle b/etc/upgrade/4.5.0/schema.Oracle
    ---- a/etc/upgrade/4.5.0/schema.Oracle
    -+++ b/etc/upgrade/4.5.0/schema.Oracle
    -@@
    - ALTER TABLE Classes DROP( HotList );
    +diff --git a/etc/upgrade/4.5.1/schema.Oracle b/etc/upgrade/4.5.1/schema.Oracle
    +--- a/etc/upgrade/4.5.1/schema.Oracle
    ++++ b/etc/upgrade/4.5.1/schema.Oracle
    +@@
     -CREATE SEQUENCE DatabaseSettings_seq;
     -CREATE TABLE DatabaseSettings (
     -    id              NUMBER(11,0)    CONSTRAINT DatabaseSettings_key PRIMARY KEY,
    @@ -157,11 +156,10 @@
     +CREATE UNIQUE INDEX Configurations1 ON Configurations (LOWER(Name));
     +CREATE INDEX Configurations2 ON Configurations (Disabled);
     
    -diff --git a/etc/upgrade/4.5.0/schema.Pg b/etc/upgrade/4.5.0/schema.Pg
    ---- a/etc/upgrade/4.5.0/schema.Pg
    -+++ b/etc/upgrade/4.5.0/schema.Pg
    -@@
    - ALTER TABLE Classes DROP COLUMN HotList;
    +diff --git a/etc/upgrade/4.5.1/schema.Pg b/etc/upgrade/4.5.1/schema.Pg
    +--- a/etc/upgrade/4.5.1/schema.Pg
    ++++ b/etc/upgrade/4.5.1/schema.Pg
    +@@
     -CREATE SEQUENCE databasesettings_id_seq;
     -CREATE TABLE DatabaseSettings (
     -    id                integer         DEFAULT nextval('databasesettings_id_seq'),
    @@ -180,9 +178,9 @@
     +CREATE UNIQUE INDEX Configurations1 ON Configurations (LOWER(Name));
     +CREATE INDEX Configurations2 ON Configurations (Disabled);
     
    -diff --git a/etc/upgrade/4.5.0/schema.SQLite b/etc/upgrade/4.5.0/schema.SQLite
    ---- a/etc/upgrade/4.5.0/schema.SQLite
    -+++ b/etc/upgrade/4.5.0/schema.SQLite
    +diff --git a/etc/upgrade/4.5.1/schema.SQLite b/etc/upgrade/4.5.1/schema.SQLite
    +--- a/etc/upgrade/4.5.1/schema.SQLite
    ++++ b/etc/upgrade/4.5.1/schema.SQLite
     @@
     -CREATE TABLE DatabaseSettings (
     +CREATE TABLE Configurations (
    @@ -199,11 +197,10 @@
     +CREATE INDEX Configurations2 ON Configurations (Disabled);
      
     
    -diff --git a/etc/upgrade/4.5.0/schema.mysql b/etc/upgrade/4.5.0/schema.mysql
    ---- a/etc/upgrade/4.5.0/schema.mysql
    -+++ b/etc/upgrade/4.5.0/schema.mysql
    -@@
    - ALTER TABLE Classes DROP COLUMN HotList;
    +diff --git a/etc/upgrade/4.5.1/schema.mysql b/etc/upgrade/4.5.1/schema.mysql
    +--- a/etc/upgrade/4.5.1/schema.mysql
    ++++ b/etc/upgrade/4.5.1/schema.mysql
    +@@
     -CREATE TABLE DatabaseSettings (
     +CREATE TABLE Configurations (
          id                int(11)         NOT NULL AUTO_INCREMENT,
21: 1406bdc301 = 21: d15f4fc7fd Validate Content of Configurations
22: 1a6ad6f99f = 22: 9cf37bca99 Use Data::Dumper instead in Configuration to support regex
23: 28b3068606 = 23: 54e8245f0b Note RT::Extension::ConfigInDatabase is cored and the main backend change
24: 7bcae0bec8 = 24: 4349f0840a Add container div for configuration pages
25: fd41af8f62 = 25: 015b7fbe08 Move Edit link to the page menu on the configuration page
26: 62bf81b5c0 = 26: e00645d6aa Add some basic help to configuration pages
27: 6726e9391a = 27: fecfb1f4b8 Add configuration documentation in POD
28: 7bf8a0e2df = 28: 450ff61b6c Add the missing $LDAPOptions to RT_Config.pm
29: 77dc32c2e0 < --:  ------- Add missing config options to %META
30: 00d9352016 = 29: 39b79ab68b Add test for /Admin/Tools/EditConfig.html
31: 625deb36fc ! 30: d164036cd0 Refactor SectionMap to get the whole structure from RT_Config.pm
    @@ -172,13 +172,10 @@
     +                while ( $content =~ m{<code>(.)([^<]*)</code>}sg ) {
     +                    my ( $sigil, $option ) = ( $1, $2 );
     +                    next unless $sigil =~ m{[\@\%\$]};    # no sigil => this is a value for a select option
    -+                    if ( $META{$option} ) {
    -+                        push @{ $SectionMap->[-1]{Content}[-1]{Content}[-1]{Content} },
    -+                            { Name => $option, Help => $name };
    ++                    if ( !$META{$option} ) {
    ++                        RT->Logger->debug("No META info for option [$option], falling back to Code widget");
     +                    }
    -+                    else {
    -+                        RT->Logger->warning("missing META info for option [$option]");
    -+                    }
    ++                    push @{ $SectionMap->[-1]{Content}[-1]{Content}[-1]{Content} }, { Name => $option, Help => $name };
                      }
                  }
              }
32: fab269a7fc ! 31: 0e582444af Re-organize RT_Config.pm to update config stucture on "RT Configuration"
    @@ -3,7 +3,7 @@
         Re-organize RT_Config.pm to update config stucture on "RT Configuration"
         
         As RT_Config.pm is the single source now, here we update RT_Config.pm
    -    to update the web UI. See also f852f6bf82
    +    to update the web UI. See also d164036cd0
         
         This commit just updates the strucutre, config items are not changed.
     
    @@ -1786,26 +1786,26 @@
      });
      
     -=item C<$GroupSearchFields>
    --
    ++=item C<$WebBaseURL>, C<$WebURL>
    + 
     -Specifies which fields of L<RT::Group> to match against and how to match
     -each field when performing a quick search on groups.  Valid match
     -methods are LIKE, STARTSWITH, ENDSWITH, =, and !=.  Valid search fields
     -are id, Name, Description, or custom fields, which are specified as
     -"CF.1234" or "CF.Name"
    --
    ++Usually you don't want to set these options. The only obvious reason
    ++is if RT is accessible via https protocol on a non standard port, e.g.
    ++'https://rt.example.com:9999'. In all other cases these options are
    ++computed using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
    + 
     -=cut
    -+=item C<$WebBaseURL>, C<$WebURL>
    - 
    +-
     -Set($GroupSearchFields, {
     -    id          => '=',
     -    Name        => 'LIKE',
     -    Description => 'LIKE',
     -});
    -+Usually you don't want to set these options. The only obvious reason
    -+is if RT is accessible via https protocol on a non standard port, e.g.
    -+'https://rt.example.com:9999'. In all other cases these options are
    -+computed using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
    - 
    +-
     -=item C<$AllowGroupAutocompleteForUnprivileged>
     +C<$WebBaseURL> is the scheme, server and port
     +(e.g. 'http://rt.example.com') for constructing URLs to the web
    @@ -2396,59 +2396,65 @@
      
      =back
      
    --=head2 Transaction display
    -+
    -+
    -+=head2 Ticket display
    - 
    +-=head2 Transaction search
    +-
      =over 4
      
    --=item C<$OldestTransactionsFirst>
    +-=item C<%TransactionDefaultSearchResultFormat>
     +=item C<$ShowMoreAboutPrivilegedUsers>
      
    --By default, RT shows newest transactions at the bottom of the ticket
    --history page, if you want see them at the top set this to 0.  This
    --option can be overridden by users in their preferences.
    +-C<%TransactionDefaultSearchResultFormat> is the default format for RT
    +-transaction search results for various object types. Keys are object types
    +-like C<RT::Ticket>, values are the format string.
     +This determines if the 'More about requestor' box on
     +Ticket/Display.html is shown for Privileged Users.
      
      =cut
      
    --Set($OldestTransactionsFirst, 1);
    +-Set(%TransactionDefaultSearchResultFormat,
    +-    'RT::Ticket' => qq{
    +-        '<B><A HREF="__WebPath__/Transaction/Display.html?id=__id__">__id__</a></B>/TITLE:ID',
    +-        '<B><A HREF="__WebPath__/Ticket/Display.html?id=__ObjectId__">__ObjectId__</a></B>/TITLE:Ticket',
    +-        '__Description__',
    +-        '<small>__OldValue__</small>',
    +-        '<small>__NewValue__</small>',
    +-        '<small>__Content__</small>',
    +-        '<small>__CreatedRelative__</small>',
    +-   },
    +-);
    +-
    +-=item C<%TranactionDefaultSearchResultOrderBy>
     +Set($ShowMoreAboutPrivilegedUsers, 0);
      
    --=item C<$ShowHistory>
    +-What Transactions column should we order by for RT Transaction search
    +-results for various object types.  Keys are object types like C<RT::Ticket>,
    +-values are the column names.
     +=item C<$MoreAboutRequestorTicketList>
      
    --This option controls how history is shown on the ticket display page.  It
    --accepts one of three possible modes and is overrideable on a per-user
    --preference level.  If you regularly deal with long tickets and don't care much
    --about the history, you may wish to change this option to C<click>.
    +-Defaults to I<id>.
     +This can be set to Active, Inactive, All or None.  It controls what
     +ticket list will be displayed in the 'More about requestor' box on
     +Ticket/Display.html.  This option can be controlled by users also.
      
    --=over
    -+=cut
    - 
    --=item C<delay> (the default)
    + =cut
    + 
    +-Set( %TransactionDefaultSearchResultOrderBy, 'RT::Ticket' => 'id' );
    +-
    +-=item C<%TransactionDefaultSearchResultOrder>
     +Set($MoreAboutRequestorTicketList, "Active");
      
    --When set to C<delay>, history is loaded via javascript after the rest of the
    --page has been loaded.  This speeds up apparent page load times and generally
    --provides a smoother experience.  You may notice slight delays before the ticket
    --history appears on very long tickets.
    +-When ordering RT Transaction search results by
    +-C<%TransactionDefaultSearchResultOrderBy>, should the sort be ascending
    +-(ASC) or descending (DESC).  Keys are object types like C<RT::Ticket>,
    +-values are either "ASC" or "DESC".
     +=item C<$MoreAboutRequestorTicketListFormat>
      
    --=item C<click>
    +-Defaults to I<ASC>.
     +Control the appearance of the ticket lists in the 'More About Requestors' box.
      
    --When set to C<click>, history is loaded on demand when a placeholder link is
    --clicked.  This speeds up ticket display page loads and history is never loaded
    --if not requested.
    -+=cut
    - 
    --=item C<always>
    + =cut
    + 
    +-Set( %TransactionDefaultSearchResultOrder, 'RT::Ticket' => 'ASC' );
     +Set($MoreAboutRequestorTicketListFormat, q{
     +       '<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>',
     +       '__Owner__',
    @@ -2456,281 +2462,353 @@
     +       '__Status__',
     +});
      
    --When set to C<always>, history is loaded before showing the page.  This ensures
    --history is always available immediately, but at the expense of longer page load
    --times.  This behaviour was the default in RT 4.0.
    - 
    --=item C<scroll>
    +-=item C<%TransactionShowSearchResultCount>
    + 
    +-Display search result count on transaction lists.  Keys are object types
    +-like C<RT::Ticket>, values are either 1 or 0.
     +=item C<$MoreAboutRequestorExtraInfo>
      
    --When set to C<scroll>, history is loaded via javascript after the rest of the
    --page has been loaded, as you scroll down the page. Ten transactions are loaded
    --initially, and then more are loaded ten at a time. This can dramatically speed
    --up initial page load times on very long tickets.
    +-Defaults to 1 (show them).
     +By default, the 'More about requestor' box on Ticket/Display.html
     +shows the Requestor's name and ticket list.  If you would like to see
     +extra information about the user, this expects a Format string of user
     +attributes.  Please note that not all the attributes are supported in
     +this display because we're not building a table.
    - 
    --=back
    ++
     +Example:
     +C<Set($MoreAboutRequestorExtraInfo,"Organization, Address1")>
      
      =cut
      
    --Set($ShowHistory, 'delay');
    +-Set( %TransactionShowSearchResultCount, 'RT::Ticket' => 1 );
     +Set($MoreAboutRequestorExtraInfo, "");
      
    --=item C<$ShowBccHeader>
    +-=back
     +=item C<$MoreAboutRequestorGroupsLimit>
      
    --By default, RT hides from the web UI information about blind copies
    --user sent on reply or comment.
    +-=head2 Transaction display
     +By default, the 'More about requestor' box on Ticket/Display.html
     +shows all the groups of the Requestor.  Use this to limit the number
     +of groups; a value of undef removes the group display entirely.
      
    +-=over 4
    ++=cut
    + 
    +-=item C<$OldestTransactionsFirst>
    ++Set($MoreAboutRequestorGroupsLimit, 0);
    + 
    +-By default, RT shows newest transactions at the bottom of the ticket
    +-history page, if you want see them at the top set this to 0.  This
    +-option can be overridden by users in their preferences.
    ++=item C<$UseSideBySideLayout>
    ++
    ++Should the ticket create and update forms use a more space efficient
    ++two column layout.  This layout may not work in narrow browsers if you
    ++set a MessageBoxWidth (below).
    + 
    + =cut
    + 
    +-Set($OldestTransactionsFirst, 1);
    ++Set($UseSideBySideLayout, 1);
    + 
    +-=item C<$ShowHistory>
    ++=item C<$EditCustomFieldsSingleColumn>
    + 
    +-This option controls how history is shown on the ticket display page.  It
    +-accepts one of three possible modes and is overrideable on a per-user
    +-preference level.  If you regularly deal with long tickets and don't care much
    +-about the history, you may wish to change this option to C<click>.
    ++When displaying a list of Ticket Custom Fields for editing, RT
    ++defaults to a 2 column list.  If you set this to 1, it will instead
    ++display the Custom Fields in a single column.
    + 
    +-=over
    ++=cut
    + 
    +-=item C<delay> (the default)
    ++Set($EditCustomFieldsSingleColumn, 0);
    + 
    +-When set to C<delay>, history is loaded via javascript after the rest of the
    +-page has been loaded.  This speeds up apparent page load times and generally
    +-provides a smoother experience.  You may notice slight delays before the ticket
    +-history appears on very long tickets.
    ++=item C<$ShowUnreadMessageNotifications>
    + 
    +-=item C<click>
    ++If set to 1, RT will prompt users when there are new,
    ++unread messages on tickets they are viewing.
    + 
    +-When set to C<click>, history is loaded on demand when a placeholder link is
    +-clicked.  This speeds up ticket display page loads and history is never loaded
    +-if not requested.
    ++=cut
    + 
    +-=item C<always>
    ++Set($ShowUnreadMessageNotifications, 0);
    + 
    +-When set to C<always>, history is loaded before showing the page.  This ensures
    +-history is always available immediately, but at the expense of longer page load
    +-times.  This behaviour was the default in RT 4.0.
    ++=item C<$AutocompleteOwners>
    + 
    +-=item C<scroll>
    ++If set to 1, the owner drop-downs for ticket update/modify and the query
    ++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.
    + 
    +-When set to C<scroll>, history is loaded via javascript after the rest of the
    +-page has been loaded, as you scroll down the page. Ten transactions are loaded
    +-initially, and then more are loaded ten at a time. This can dramatically speed
    +-up initial page load times on very long tickets.
    ++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>.
    + 
    +-=back
    ++Drop down doesn't show unprivileged users. If your setup allows unprivileged
    ++to own ticket then you have to enable autocompleting.
    + 
    + =cut
    + 
    +-Set($ShowHistory, 'delay');
    ++Set($AutocompleteOwners, 0);
    + 
    +-=item C<$ShowBccHeader>
    ++=item C<$DropdownMenuLimit>
    + 
    +-By default, RT hides from the web UI information about blind copies
    +-user sent on reply or comment.
    ++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($ShowBccHeader, 0);
    -+Set($MoreAboutRequestorGroupsLimit, 0);
    ++Set($DropdownMenuLimit, 50);
      
     -=item C<$TrustHTMLAttachments>
    -+=item C<$UseSideBySideLayout>
    ++=item C<$AutocompleteOwnersForSearch>
      
     -If C<TrustHTMLAttachments> is not defined, we will display them as
     -text. This prevents malicious HTML and JavaScript from being sent in a
     -request (although there is probably more to it than that)
    -+Should the ticket create and update forms use a more space efficient
    -+two column layout.  This layout may not work in narrow browsers if you
    -+set a MessageBoxWidth (below).
    ++If set to 1, the owner drop-downs for the query builder are always
    ++replaced by text field that autocomplete and C<$AutocompleteOwners>
    ++is ignored. Helpful when owners list is huge in the query builder.
      
      =cut
      
     -Set($TrustHTMLAttachments, undef);
    -+Set($UseSideBySideLayout, 1);
    ++Set($AutocompleteOwnersForSearch, 0);
      
     -=item C<$AlwaysDownloadAttachments>
    -+=item C<$EditCustomFieldsSingleColumn>
    ++=item C<$AutocompleteQueues>
      
     -Always download attachments, regardless of content type. If set, this
     -overrides C<TrustHTMLAttachments>.
    -+When displaying a list of Ticket Custom Fields for editing, RT
    -+defaults to a 2 column list.  If you set this to 1, it will instead
    -+display the Custom Fields in a single column.
    ++If set to 1, any queue drop-downs are replaced by text fields that
    ++autocomplete. This can alleviate the sometimes huge queue list for
    ++installations with many queues, and can also increase page load
    ++times in some cases. A user can override this setting as a personal
    ++preference.
      
      =cut
      
     -Set($AlwaysDownloadAttachments, undef);
    -+Set($EditCustomFieldsSingleColumn, 0);
    ++Set($AutocompleteQueues, 0);
      
     -=item C<$AttachmentListCount>
    -+=item C<$ShowUnreadMessageNotifications>
    ++=item C<$UserSearchFields>
      
     -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
     -all attachments. A value of C<0> means show no attachments by default.
    -+If set to 1, RT will prompt users when there are new,
    -+unread messages on tickets they are viewing.
    ++Used by the User Autocompleter as well as the User Search.
    ++
    ++Specifies which fields of L<RT::User> to match against and how to match
    ++each field when autocompleting users.  Valid match methods are LIKE,
    ++STARTSWITH, ENDSWITH, =, and !=.  Valid search fields are the core User
    ++fields, as well as custom fields, which are specified as "CF.1234" or
    ++"CF.Name"
      
      =cut
      
     -Set($AttachmentListCount, undef);
    -+Set($ShowUnreadMessageNotifications, 0);
    ++Set($UserSearchFields, {
    ++    EmailAddress => 'STARTSWITH',
    ++    Name         => 'STARTSWITH',
    ++    RealName     => 'LIKE',
    ++});
      
     -=item C<$PreferRichText>
    -+=item C<$AutocompleteOwners>
    ++=item C<$TicketAutocompleteFields>
      
     -By default, RT shows rich text (HTML) messages if possible.  If
     -C<$PreferRichText> is set to 0, RT will show plain text messages in
     -preference to any rich text alternatives.
    -+If set to 1, the owner drop-downs for ticket update/modify and the query
    -+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.
    ++Specifies which fields of L<RT::Ticket> to match against and how to match each
    ++field when autocompleting users.  Valid match methods are LIKE, STARTSWITH,
    ++ENDSWITH, C<=>, and C<!=>.
      
     -As a security precaution, RT limits the HTML that is displayed to a
     -known-good subset -- as allowing arbitrary HTML to be displayed exposes
     -multiple vectors for XSS and phishing attacks.  If
     -L</$TrustHTMLAttachments> is enabled, the original HTML is available for
     -viewing via the "Download" link.
    -+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.
    ++Not all Ticket fields are publically accessible and hence won't work for
    ++autocomplete unless you override their accessibility using a local overlay or a
    ++plugin.  Out of the box the following fields are public: id, Subject.
      
      =cut
      
     -Set($PreferRichText, 1);
    -+Set($AutocompleteOwners, 0);
    ++Set( $TicketAutocompleteFields, {
    ++    id      => 'STARTSWITH',
    ++    Subject => 'LIKE',
    ++});
      
     -=item C<$MaxInlineBody>
    -+=item C<$DropdownMenuLimit>
    ++=item C<$DisplayTicketAfterQuickCreate>
      
     -C<$MaxInlineBody> is the maximum textual attachment size that we want to
     -see inline when viewing a transaction.  RT will inline any text if the
     -value is undefined or 0.  This option can be overridden by users in
     -their preferences.  The default is 25k.
    -+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.
    ++Enable this to redirect to the created ticket display page
    ++automatically when using QuickCreate.
      
      =cut
      
     -Set($MaxInlineBody, 25 * 1024);
    -+Set($DropdownMenuLimit, 50);
    ++Set($DisplayTicketAfterQuickCreate, 0);
      
     -=item C<$ShowTransactionImages>
    -+=item C<$AutocompleteOwnersForSearch>
    ++=item C<$WikiImplicitLinks>
      
     -By default, RT shows images attached to incoming (and outgoing) ticket
     -updates inline. Set this variable to 0 if you'd like to disable that
     -behavior.
    -+If set to 1, the owner drop-downs for the query builder are always
    -+replaced by text field that autocomplete and C<$AutocompleteOwners>
    -+is ignored. Helpful when owners list is huge in the query builder.
    ++Support implicit links in WikiText custom fields?  Setting this to 1
    ++causes InterCapped or ALLCAPS words in WikiText fields to automatically
    ++become links to searches for those words.  If used on Articles, it links
    ++to the Article with that name.
      
      =cut
      
     -Set($ShowTransactionImages, 1);
     -
     -=item C<$ShowRemoteImages>
    -+Set($AutocompleteOwnersForSearch, 0);
    ++Set($WikiImplicitLinks, 0);
      
     -By default, RT doesn't show remote images attached to incoming (and outgoing)
     -ticket updates inline.  Set this variable to 1 if you'd like to enable remote
     -image display.  Showing remote images may allow spammers and other senders to
     -track when messages are viewed and see referer information.
    -+=item C<$AutocompleteQueues>
    ++=item C<$PreviewScripMessages>
      
     -Note that this setting is independent of L</$ShowTransactionImages> above.
    -+If set to 1, any queue drop-downs are replaced by text fields that
    -+autocomplete. This can alleviate the sometimes huge queue list for
    -+installations with many queues, and can also increase page load
    -+times in some cases. A user can override this setting as a personal
    -+preference.
    ++Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
    ++reply page should include the content of the messages to be sent.
      
      =cut
      
     -Set($ShowRemoteImages, 0);
    -+Set($AutocompleteQueues, 0);
    ++Set($PreviewScripMessages, 0);
      
     -=item C<$PlainTextMono>
    -+=item C<$UserSearchFields>
    ++=item C<$SimplifiedRecipients>
      
     -Normally plaintext attachments are displayed as HTML with line breaks
     -preserved.  This causes space- and tab-based formatting not to be
     -displayed correctly.  Set C<$PlainTextMono> to 1 to use a monospaced
     -font and preserve formatting.
    -+Used by the User Autocompleter as well as the User Search.
    -+
    -+Specifies which fields of L<RT::User> to match against and how to match
    -+each field when autocompleting users.  Valid match methods are LIKE,
    -+STARTSWITH, ENDSWITH, =, and !=.  Valid search fields are the core User
    -+fields, as well as custom fields, which are specified as "CF.1234" or
    -+"CF.Name"
    ++If C<$SimplifiedRecipients> is set, a simple list of who will receive
    ++B<any> kind of mail will be shown on the ticket reply page, instead of a
    ++detailed breakdown by scrip.
      
      =cut
      
     -Set($PlainTextMono, 0);
    -+Set($UserSearchFields, {
    -+    EmailAddress => 'STARTSWITH',
    -+    Name         => 'STARTSWITH',
    -+    RealName     => 'LIKE',
    -+});
    ++Set($SimplifiedRecipients, 0);
      
     -=item C<$SuppressInlineTextFiles>
    -+=item C<$TicketAutocompleteFields>
    ++=item C<$SquelchedRecipients>
      
     -If C<$SuppressInlineTextFiles> is set to 1, then uploaded text files
     -(text-type attachments with file names) are prevented from being
     -displayed in-line when viewing a ticket's history.
    -+Specifies which fields of L<RT::Ticket> to match against and how to match each
    -+field when autocompleting users.  Valid match methods are LIKE, STARTSWITH,
    -+ENDSWITH, C<=>, and C<!=>.
    -+
    -+Not all Ticket fields are publically accessible and hence won't work for
    -+autocomplete unless you override their accessibility using a local overlay or a
    -+plugin.  Out of the box the following fields are public: id, Subject.
    ++If C<$SquelchedRecipients> is set, the checkbox list of who will receive
    ++B<any> kind of mail on the ticket reply page are displayed initially as
    ++B<un>checked - which means nobody in that list would get any mail. It
    ++does not affect correspondence done via email yet.
      
      =cut
      
     -Set($SuppressInlineTextFiles, undef);
    -+Set( $TicketAutocompleteFields, {
    -+    id      => 'STARTSWITH',
    -+    Subject => 'LIKE',
    -+});
    - 
    -+=item C<$DisplayTicketAfterQuickCreate>
    - 
    +-
    +-
     -=item C<@Active_MakeClicky>
    -+Enable this to redirect to the created ticket display page
    -+automatically when using QuickCreate.
    - 
    +-
     -MakeClicky detects various formats of data in headers and email
     -messages, and extends them with supporting links.  By default, RT
     -provides two formats:
    -+=cut
    ++Set($SquelchedRecipients, 0);
      
     -* 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
     -  link after the URL.
    -+Set($DisplayTicketAfterQuickCreate, 0);
    ++=item C<$HideResolveActionsWithDependencies>
      
     -* 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
     -  replaces the URL with a link.  Enabled by default.
    -+=item C<$WikiImplicitLinks>
    ++If set to 1, this option will skip ticket menu actions which can't be
    ++completed successfully because of outstanding active Depends On tickets.
      
     -See F<share/html/Elements/MakeClicky> for documentation on how to add
     -your own styles of link detection.
    -+Support implicit links in WikiText custom fields?  Setting this to 1
    -+causes InterCapped or ALLCAPS words in WikiText fields to automatically
    -+become links to searches for those words.  If used on Articles, it links
    -+to the Article with that name.
    ++By default, all ticket actions are displayed in the menu even if some of
    ++them can't be successful until all Depends On links are resolved or
    ++transitioned to another inactive status.
      
      =cut
      
     -Set(@Active_MakeClicky, qw(httpurl_overwrite));
    -+Set($WikiImplicitLinks, 0);
    ++Set($HideResolveActionsWithDependencies, 0);
      
     -=item C<$QuoteFolding>
    -+=item C<$PreviewScripMessages>
    ++=item C<$HideUnsetFieldsOnDisplay>
      
     -Quote folding is the hiding of old replies in transaction history.
     -It defaults to on.  Set this to 0 to disable it.
    -+Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
    -+reply page should include the content of the messages to be sent.
    ++This determines if we should hide unset fields on ticket display page.
    ++Set this to 1 to hide unset fields.
      
      =cut
      
     -Set($QuoteFolding, 1);
    --
    --=back
    -+Set($PreviewScripMessages, 0);
    - 
    -+=item C<$SimplifiedRecipients>
    ++Set($HideUnsetFieldsOnDisplay, 0);
    + 
    + =back
    + 
    ++=head2 Group Summary Configuration
      
     -=head1 Application logic
    -+If C<$SimplifiedRecipients> is set, a simple list of who will receive
    -+B<any> kind of mail will be shown on the ticket reply page, instead of a
    -+detailed breakdown by scrip.
    - 
    +-
     -=over 4
    -+=cut
    ++Below are configuration options for the Group Summary page.
      
     -=item C<$ParseNewMessageForTicketCcs>
    -+Set($SimplifiedRecipients, 0);
    ++=over
      
     -If C<$ParseNewMessageForTicketCcs> is set to 1, RT will attempt to
     -divine Ticket 'Cc' watchers from the To and Cc lines of incoming
    @@ -2739,55 +2817,54 @@
     -addresses which forward mail to RT automatically and you enable this
     -option without modifying C<$RTAddressRegexp> below, you will get
     -yourself into a heap of trouble.
    -+=item C<$SquelchedRecipients>
    ++=item C<$GroupSearchResultFormat>
      
     -See also the L<RT::Action::AutoAddWatchers> extension which adds
     -watchers from ticket replies on existing tickets.
    -+If C<$SquelchedRecipients> is set, the checkbox list of who will receive
    -+B<any> kind of mail on the ticket reply page are displayed initially as
    -+B<un>checked - which means nobody in that list would get any mail. It
    -+does not affect correspondence done via email yet.
    ++This controls the display of lists of groups returned from the Group
    ++Summary Search. The display of groups in the Admin interface is
    ++controlled by C<%AdminSearchResultFormat>.
      
      =cut
      
     -Set($ParseNewMessageForTicketCcs, undef);
    -+Set($SquelchedRecipients, 0);
    ++Set($GroupSearchResultFormat,
    ++         q{ '<a href="__WebPath__/Group/Summary.html?id=__id__">__id__</a>/TITLE:#'}
    ++        .q{,'<a href="__WebPath__/Group/Summary.html?id=__id__">__Name__</a>/TITLE:Name'}
    ++);
      
     -=item C<$UseTransactionBatch>
    -+=item C<$HideResolveActionsWithDependencies>
    ++=item C<@GroupSummaryPortlets>
      
     -Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
     -such that a resolve and comment (for example) would happen
     -simultaneously, instead of as two transactions, unaware of each
     -others' existence.
    -+If set to 1, this option will skip ticket menu actions which can't be
    -+completed successfully because of outstanding active Depends On tickets.
    -+
    -+By default, all ticket actions are displayed in the menu even if some of
    -+them can't be successful until all Depends On links are resolved or
    -+transitioned to another inactive status.
    ++A list of portlets to be displayed on the Group Summary page.
    ++By default, we show all of the available portlets.
    ++Extensions may provide their own portlets for this page.
      
      =cut
      
     -Set($UseTransactionBatch, 1);
    -+Set($HideResolveActionsWithDependencies, 0);
    ++Set(@GroupSummaryPortlets, (qw/ExtraInfo CreateTicket ActiveTickets InactiveTickets GroupAssets /));
      
     -=item C<$StrictLinkACL>
    -+=item C<$HideUnsetFieldsOnDisplay>
    ++=item C<$GroupSummaryExtraInfo>
      
     -When this feature is enabled a user needs I<ModifyTicket> rights on
     -both tickets to link them together; otherwise, I<ModifyTicket> rights
     -on either of them is sufficient.
    -+This determines if we should hide unset fields on ticket display page.
    -+Set this to 1 to hide unset fields.
    ++This controls what information is displayed on the Group Summary
    ++portal. By default the group Name and Description are displayed.
      
      =cut
      
     -Set($StrictLinkACL, 1);
    -+Set($HideUnsetFieldsOnDisplay, 0);
    ++Set($GroupSummaryExtraInfo, "id, Name, Description");
      
     -=item C<$RedistributeAutoGeneratedMessages>
    -+=back
    ++=item C<$GroupSummaryTicketListFormat>
      
     -Should RT redistribute correspondence that it identifies as machine
     -generated?  A 1 will do so; setting this to 0 will cause no
    @@ -2795,75 +2872,12 @@
     -default), which will redistribute only to privileged users. This helps
     -to protect against malformed bounces and loops caused by auto-created
     -requestors with bogus addresses.
    -+=head2 Group Summary Configuration
    - 
    --=cut
    -+Below are configuration options for the Group Summary page.
    - 
    --Set($RedistributeAutoGeneratedMessages, "privileged");
    -+=over
    - 
    --=item C<$ApprovalRejectionNotes>
    -+=item C<$GroupSearchResultFormat>
    - 
    --Should rejection notes from approvals be sent to the requestors?
    -+This controls the display of lists of groups returned from the Group
    -+Summary Search. The display of groups in the Admin interface is
    -+controlled by C<%AdminSearchResultFormat>.
    - 
    - =cut
    - 
    --Set($ApprovalRejectionNotes, 1);
    -+Set($GroupSearchResultFormat,
    -+         q{ '<a href="__WebPath__/Group/Summary.html?id=__id__">__id__</a>/TITLE:#'}
    -+        .q{,'<a href="__WebPath__/Group/Summary.html?id=__id__">__Name__</a>/TITLE:Name'}
    -+);
    - 
    --=item C<$ForceApprovalsView>
    -+=item C<@GroupSummaryPortlets>
    - 
    --Should approval tickets only be viewed and modified through the standard
    --approval interface?  With this setting enabled (by default), any attempt to use
    --the normal ticket display and modify page for approval tickets will be
    --redirected.
    -+A list of portlets to be displayed on the Group Summary page.
    -+By default, we show all of the available portlets.
    -+Extensions may provide their own portlets for this page.
    - 
    --For example, with this option set to 1 and an approval ticket #123:
    -+=cut
    - 
    --    /Ticket/Display.html?id=123
    -+Set(@GroupSummaryPortlets, (qw/ExtraInfo CreateTicket ActiveTickets InactiveTickets GroupAssets /));
    - 
    --is redirected to
    -+=item C<$GroupSummaryExtraInfo>
    - 
    --    /Approval/Display.html?id=123
    -+This controls what information is displayed on the Group Summary
    -+portal. By default the group Name and Description are displayed.
    - 
    --With this option set to 0, the redirect won't happen.
    -+=cut
    - 
    --=back
    --
    --=cut
    -+Set($GroupSummaryExtraInfo, "id, Name, Description");
    - 
    --Set($ForceApprovalsView, 1);
    -+=item C<$GroupSummaryTicketListFormat>
    - 
    --=head1 Extra security
     +Control the appearance of the Active and Inactive ticket lists in the
     +Group Summary.
      
    --This is a list of extra security measures to enable that help keep your RT
    --safe.  If you don't know what these mean, you should almost certainly leave the
    --defaults alone.
    -+=cut
    - 
    --=over 4
    + =cut
    + 
    +-Set($RedistributeAutoGeneratedMessages, "privileged");
     +Set($GroupSummaryTicketListFormat, q{
     +       '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
     +       '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
    @@ -2880,13 +2894,10 @@
     +       '<small>__TimeLeft__</small>'
     +});
      
    --=item C<$DisallowExecuteCode>
    +-=item C<$ApprovalRejectionNotes>
     +=item C<$GroupSearchFields>
      
    --If set to 1, the C<ExecuteCode> right will be removed from
    --all users, B<including> the superuser.  This is intended for when RT is
    --installed into a shared environment where even the superuser should not
    --be allowed to run arbitrary Perl code on the server via scrips.
    +-Should rejection notes from approvals be sent to the requestors?
     +Specifies which fields of L<RT::Group> to match against and how to match
     +each field when performing a quick search on groups.  Valid match
     +methods are LIKE, STARTSWITH, ENDSWITH, =, and !=.  Valid search fields
    @@ -2895,122 +2906,100 @@
      
      =cut
      
    --Set($DisallowExecuteCode, 0);
    +-Set($ApprovalRejectionNotes, 1);
     +Set($GroupSearchFields, {
     +    id          => '=',
     +    Name        => 'LIKE',
     +    Description => 'LIKE',
     +});
      
    --=item C<$Framebusting>
    +-=item C<$ForceApprovalsView>
     +=item C<$AllowGroupAutocompleteForUnprivileged>
      
    --If set to 0, framekiller javascript will be disabled and the
    --X-Frame-Options: DENY header will be suppressed from all responses.
    --This disables RT's clickjacking protection.
    +-Should approval tickets only be viewed and modified through the standard
    +-approval interface?  With this setting enabled (by default), any attempt to use
    +-the normal ticket display and modify page for approval tickets will be
    +-redirected.
     +Defines whether unprivileged users (users of SelfService) are allowed
     +to autocomplete groups when searching. Setting this option to 1 means
     +unprivileged users will be able to search all your user created
     +group names. Users will also need the SeeGroup privilege to use
     +this feature.
      
    - =cut
    - 
    --Set($Framebusting, 1);
    +-For example, with this option set to 1 and an approval ticket #123:
    ++=cut
    + 
    +-    /Ticket/Display.html?id=123
     +Set($AllowGroupAutocompleteForUnprivileged, 0);
      
    --=item C<$RestrictReferrer>
    +-is redirected to
     +=back
      
    --If set to 0, the HTTP C<Referer> (sic) header will not be
    --checked to ensure that requests come from RT's own domain.  As RT allows
    --for GET requests to alter state, disabling this opens RT up to
    --cross-site request forgery (CSRF) attacks.
    +-    /Approval/Display.html?id=123
     +=head2 Self Service Interface
      
    --=cut
    +-With this option set to 0, the redirect won't happen.
     +The Self Service Interface is a view automatically presented to Unprivileged
     +users who have a password and log into the web UI. The following options
     +modify the default behavior of the Self Service pages.
      
    --Set($RestrictReferrer, 1);
    +-=back
     +=over 4
    - 
    --=item C<$RestrictLoginReferrer>
    ++
     +=item C<$SelfServiceCorrespondenceOnly>
    - 
    --If set to 0, RT will allow the user to log in from any link
    --or request, merely by passing in C<user> and C<pass> parameters; setting
    --it to 1 forces all logins to come from the login box, so the
    --user is aware that they are being logged in.  The default is off, for
    --backwards compatability.
    ++
     +On the ticket display page, show only correspondence transactions in the
     +ticket history. This hides all ticket update transactions like status changes,
     +custom field updates, updates to watchers, etc.
      
      =cut
      
    --Set($RestrictLoginReferrer, 0);
    --
    --=item C<@ReferrerWhitelist>
    +-Set($ForceApprovalsView, 1);
     +Set($SelfServiceCorrespondenceOnly, 0);
      
    --This is a list of hostname:port combinations that RT will treat as being
    --part of RT's domain. This is particularly useful if you access RT as
    --multiple hostnames or have an external auth system that needs to
    --redirect back to RT once authentication is complete.
    +-=head1 Extra security
     +=item C<$HideTimeFieldsFromUnprivilegedUsers>
      
    -- Set(@ReferrerWhitelist, qw(www.example.com:443  www3.example.com:80));
    +-This is a list of extra security measures to enable that help keep your RT
    +-safe.  If you don't know what these mean, you should almost certainly leave the
    +-defaults alone.
     +This determines if we should hide Time Worked, Time Estimated, and
     +Time Left for unprivileged users.
     +Set this to 1 to hide those fields.
      
    --If the "RT has detected a possible cross-site request forgery" error is triggered
    --by a host:port sent by your browser that you believe should be valid, you can copy
    --the host:port from the error message into this list.
    +-=over 4
     +=cut
      
    --Simple wildcards, similar to SSL certificates, are allowed.  For example:
    +-=item C<$DisallowExecuteCode>
     +Set($HideTimeFieldsFromUnprivilegedUsers, 0);
      
    --    *.example.com:80    # matches foo.example.com
    --                        # but not example.com
    --                        #      or foo.bar.example.com
    +-If set to 1, the C<ExecuteCode> right will be removed from
    +-all users, B<including> the superuser.  This is intended for when RT is
    +-installed into a shared environment where even the superuser should not
    +-be allowed to run arbitrary Perl code on the server via scrips.
     +=item C<$AllowUserAutocompleteForUnprivileged>
    - 
    --    www*.example.com:80 # matches www3.example.com
    --                        #     and www-test.example.com
    --                        #     and www.example.com
    ++
     +Should unprivileged users (users of SelfService) be allowed to
     +autocomplete users. Setting this option to 1 means unprivileged users
     +will be able to search all your users.
      
      =cut
      
    --Set(@ReferrerWhitelist, qw());
    --
    --=item C<%ReferrerComponents>
    --
    --C<%ReferrerComponents> is the hash to customize referrer checking behavior when
    --C<$RestrictReferrer> is enabled, where you can whitelist or blacklist the
    --components along with their query args. e.g.
    +-Set($DisallowExecuteCode, 0);
     +Set($AllowUserAutocompleteForUnprivileged, 0);
      
    --    Set( %ReferrerComponents,
    --        ( '/Foo.html' => 1, '/Bar.html' => 0, '/Baz.html' => [ 'id', 'results' ] )
    --    );
    +-=item C<$Framebusting>
     +=item C<$DefaultSelfServiceSearchResultFormat>
      
    --With this, '/Foo.html' will be whitelisted, and '/Bar.html' will be blacklisted.
    --'/Baz.html' with id/results query arguments will be whitelisted but blacklisted
    --if there are other query arguments.
    +-If set to 0, framekiller javascript will be disabled and the
    +-X-Frame-Options: DENY header will be suppressed from all responses.
    +-This disables RT's clickjacking protection.
     +C<$DefaultSelfServiceSearchResultFormat> is the default format of
     +searches displayed in the SelfService interface.
      
      =cut
      
    --Set( %ReferrerComponents );
    +-Set($Framebusting, 1);
     +Set($DefaultSelfServiceSearchResultFormat, qq{
     +   '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
     +   '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
    @@ -3018,12 +3007,13 @@
     +   Requestors,
     +   Owner});
      
    --=item C<$BcryptCost>
    +-=item C<$RestrictReferrer>
     +=item C<$SelfServiceRegex>
      
    --This sets the default cost parameter used for the C<bcrypt> key
    --derivation function.  Valid values range from 4 to 31, inclusive, with
    --higher numbers denoting greater effort.
    +-If set to 0, the HTTP C<Referer> (sic) header will not be
    +-checked to ensure that requests come from RT's own domain.  As RT allows
    +-for GET requests to alter state, disabling this opens RT up to
    +-cross-site request forgery (CSRF) attacks.
     +What portion of RT's URLspace should be accessible to Unprivileged
     +users This does not override the redirect from F</Ticket/Display.html>
     +to F</SelfService/Display.html> when Unprivileged users attempt to
    @@ -3031,216 +3021,222 @@
      
      =cut
      
    --Set($BcryptCost, 12);
    +-Set($RestrictReferrer, 1);
     +Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
      
    --=back
    +-=item C<$RestrictLoginReferrer>
     +=item C<$SelfServiceUserPrefs>
      
    +-If set to 0, RT will allow the user to log in from any link
    +-or request, merely by passing in C<user> and C<pass> parameters; setting
    +-it to 1 forces all logins to come from the login box, so the
    +-user is aware that they are being logged in.  The default is off, for
    +-backwards compatability.
     +This option controls how the SelfService user preferences page is
     +displayed. It accepts a string from one of the four possible modes
     +below.
      
    +-=cut
     +=over
      
    --=head1 Authorization and user configuration
    +-Set($RestrictLoginReferrer, 0);
     +=item C<edit-prefs> (the default)
      
    --=over 4
    +-=item C<@ReferrerWhitelist>
     +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.
      
    +-This is a list of hostname:port combinations that RT will treat as being
    +-part of RT's domain. This is particularly useful if you access RT as
    +-multiple hostnames or have an external auth system that needs to
    +-redirect back to RT once authentication is complete.
    ++=item C<view-info>
    + 
    +- Set(@ReferrerWhitelist, qw(www.example.com:443  www3.example.com:80));
    ++When set to C<view-info>, users will have full access to all their
    ++user information stored in RT on a read-only page.
    + 
    +-If the "RT has detected a possible cross-site request forgery" error is triggered
    +-by a host:port sent by your browser that you believe should be valid, you can copy
    +-the host:port from the error message into this list.
    ++=item C<edit-prefs-view-info>
    + 
    +-Simple wildcards, similar to SSL certificates, are allowed.  For example:
    ++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.
    + 
    +-    *.example.com:80    # matches foo.example.com
    +-                        # but not example.com
    +-                        #      or foo.bar.example.com
    ++=item C<full-edit>
    + 
    +-    www*.example.com:80 # matches www3.example.com
    +-                        #     and www-test.example.com
    +-                        #     and www.example.com
    ++When set to C<full-edit>, users will be able to fully view and update
    ++all of their stored RT user information.
    + 
    +-=cut
    ++=back
    + 
    +-Set(@ReferrerWhitelist, qw());
    ++=cut
    + 
    +-=item C<%ReferrerComponents>
    ++Set($SelfServiceUserPrefs, 'edit-prefs');
    + 
    +-C<%ReferrerComponents> is the hash to customize referrer checking behavior when
    +-C<$RestrictReferrer> is enabled, where you can whitelist or blacklist the
    +-components along with their query args. e.g.
    ++=item C<$SelfServiceRequestUpdateQueue>
    + 
    +-    Set( %ReferrerComponents,
    +-        ( '/Foo.html' => 1, '/Bar.html' => 0, '/Baz.html' => [ 'id', 'results' ] )
    +-    );
    ++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'.
    + 
    +-With this, '/Foo.html' will be whitelisted, and '/Bar.html' will be blacklisted.
    +-'/Baz.html' with id/results query arguments will be whitelisted but blacklisted
    +-if there are other query arguments.
    ++Self service users need the CreateTicket right on this queue to create
    ++a ticket.
    + 
    + =cut
    + 
    +-Set( %ReferrerComponents );
    ++Set($SelfServiceRequestUpdateQueue, undef);
    + 
    +-=item C<$BcryptCost>
    ++=item C<$SelfServiceDownloadUserData>
    + 
    +-This sets the default cost parameter used for the C<bcrypt> key
    +-derivation function.  Valid values range from 4 to 31, inclusive, with
    +-higher numbers denoting greater effort.
    ++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.
    + 
    + =cut
    + 
    +-Set($BcryptCost, 12);
    ++Set( $SelfServiceDownloadUserData, 0 );
    + 
    +-=back
    ++=item C<$SelfServiceShowGroupTickets>
    ++
    ++Set this option to true to show a section with group tickets
    ++on self service pages.
    + 
    ++=cut
    ++
    ++Set($SelfServiceShowGroupTickets, 0);
    + 
    ++=back
    + 
    +-=head1 Authorization and user configuration
    ++=head2 Articles
    + 
    + =over 4
    + 
     -=item C<$WebRemoteUserAuth>
    -+=item C<view-info>
    ++=item C<$ArticleOnTicketCreate>
      
     -If C<$WebRemoteUserAuth> is defined, RT will defer to the environment's
     -REMOTE_USER variable, which should be set by the webserver's
     -authentication layer.
    -+When set to C<view-info>, users will have full access to all their
    -+user information stored in RT on a read-only page.
    - 
    --=cut
    -+=item C<edit-prefs-view-info>
    ++Set this to 1 to display the Articles interface on the Ticket Create
    ++page in addition to the Reply/Comment page.
    + 
    + =cut
      
     -Set($WebRemoteUserAuth, undef);
    -+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($ArticleOnTicketCreate, 0);
      
     -=item C<$WebRemoteUserContinuous>
    -+=item C<full-edit>
    ++=item C<$HideArticleSearchOnReplyCreate>
      
     -If C<$WebRemoteUserContinuous> is defined, RT will check for the
     -REMOTE_USER on each access.  If you would prefer this to only happen
     -once (at initial login) set this to 0.  The default
     -setting will help ensure that if your webserver's authentication layer
     -deauthenticates a user, RT notices as soon as possible.
    -+When set to C<full-edit>, users will be able to fully view and update
    -+all of their stored RT user information.
    -+
    -+=back
    ++Set this to 1 to hide "Include Article" box on the ticket update page.
      
      =cut
      
     -Set($WebRemoteUserContinuous, 1);
    -+Set($SelfServiceUserPrefs, 'edit-prefs');
    ++Set($HideArticleSearchOnReplyCreate, 0);
      
     -=item C<$WebFallbackToRTLogin>
    -+=item C<$SelfServiceRequestUpdateQueue>
    ++=item C<$LinkArticlesOnInclude>
      
     -If C<$WebFallbackToRTLogin> is defined, the user is allowed a
     -chance of fallback to the login screen, even if REMOTE_USER failed.
    -+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'.
    -+
    -+Self service users need the CreateTicket right on this queue to create
    -+a ticket.
    ++Set this to 0 to suppress the default behavior of automatically linking
    ++to Articles when they are included in a message.
      
      =cut
      
     -Set($WebFallbackToRTLogin, undef);
    -+Set($SelfServiceRequestUpdateQueue, undef);
    ++Set($LinkArticlesOnInclude, 1);
      
     -=item C<$LogoutURL>
    -+=item C<$SelfServiceDownloadUserData>
    ++=back
      
     -By default, C<$LogoutURL> is set to RT's logout page. When an
     -external service is used to log into RT, C<$LogoutURL> can be set
     -to the identity provider's logout URL. Include the full path to the
     -logout endpoint, for example: 'https://www.example.com/logout'.
    -+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.
    - 
    - =cut
    ++=head2 Assets
    + 
    +-=cut
    ++=over 4
      
     -Set($LogoutURL, '/NoAuth/Logout.html');
    -+Set( $SelfServiceDownloadUserData, 0 );
    - 
    +-
     -=item C<$WebRemoteUserGecos>
    -+=item C<$SelfServiceShowGroupTickets>
    ++=item C<@AssetQueues>
      
     -C<$WebRemoteUserGecos> means to match 'gecos' field as the user
     -identity; useful with C<mod_auth_external>.
    -+Set this option to true to show a section with group tickets
    -+on self service pages.
    ++This should be a list of names of queues whose tickets should always
    ++display the "Assets" box.  This is useful for queues which deal
    ++primarily with assets, as it provides a ready box to link an asset to
    ++the ticket, even when the ticket has no related assets yet.
      
      =cut
      
     -Set($WebRemoteUserGecos, undef);
    --
    ++# Set(@AssetQueues, ());
    + 
     -=item C<$WebRemoteUserAutocreate>
    -+Set($SelfServiceShowGroupTickets, 0);
    ++=item C<$DefaultCatalog>
      
     -C<$WebRemoteUserAutocreate> will create users under the same name as
     -REMOTE_USER upon login, if they are missing from the Users table.
    -+=back
    - 
    --=cut
    -+=head2 Articles
    ++This provides the default catalog after a user initially logs in.
    ++However, the default catalog is "sticky," and so will remember the
    ++last-selected catalog thereafter.
    + 
    + =cut
      
     -Set($WebRemoteUserAutocreate, undef);
    -+=over 4
    ++# Set($DefaultCatalog, 'General assets');
      
     -=item C<$UserAutocreateDefaultsOnLogin>
    -+=item C<$ArticleOnTicketCreate>
    ++=item C<$AssetSearchFields>
      
     -If C<$WebRemoteUserAutocreate> is set to 1, C<$UserAutocreateDefaultsOnLogin>
     -will be passed to L<RT::User/Create>.  Use it to set defaults, such as
     -creating unprivileged users with C<<{ Privileged => 0 }>>.  This must be
     -a hashref.
    -+Set this to 1 to display the Articles interface on the Ticket Create
    -+page in addition to the Reply/Comment page.
    - 
    - =cut
    - 
    --Set($UserAutocreateDefaultsOnLogin, undef);
    --
    --=item C<$WebSessionClass>
    -+Set($ArticleOnTicketCreate, 0);
    - 
    --C<$WebSessionClass> is the class you wish to use for storing sessions.  On
    --MySQL, Pg, and Oracle it defaults to using your database, in other cases
    --sessions are stored in files using L<Apache::Session::File>. Other installed
    --Apache::Session::* modules can be used to store sessions.
    -+=item C<$HideArticleSearchOnReplyCreate>
    - 
    --    Set($WebSessionClass, "Apache::Session::File");
    -+Set this to 1 to hide "Include Article" box on the ticket update page.
    - 
    - =cut
    - 
    --Set($WebSessionClass, undef);
    -+Set($HideArticleSearchOnReplyCreate, 0);
    - 
    --=item C<%WebSessionProperties>
    -+=item C<$LinkArticlesOnInclude>
    - 
    --C<%WebSessionProperties> is the hash to configure class L</$WebSessionClass>
    --in case custom class is used. By default it's empty and values are picked
    --depending on the class. Make sure that it's empty if you're using DB as session
    --backend.
    -+Set this to 0 to suppress the default behavior of automatically linking
    -+to Articles when they are included in a message.
    - 
    - =cut
    - 
    --Set( %WebSessionProperties );
    -+Set($LinkArticlesOnInclude, 1);
    - 
    --=item C<$AutoLogoff>
    -+=back
    - 
    --By default, RT's user sessions persist until a user closes his or her
    --browser. With the C<$AutoLogoff> option you can setup session lifetime
    --in minutes. A user will be logged out if he or she doesn't send any
    --requests to RT for the defined time.
    -+=head2 Assets
    -+
    -+=over 4
    -+
    -+=item C<@AssetQueues>
    -+
    -+This should be a list of names of queues whose tickets should always
    -+display the "Assets" box.  This is useful for queues which deal
    -+primarily with assets, as it provides a ready box to link an asset to
    -+the ticket, even when the ticket has no related assets yet.
    - 
    - =cut
    - 
    --Set($AutoLogoff, 0);
    -+# Set(@AssetQueues, ());
    - 
    --=item C<$LogoutRefresh>
    -+=item C<$DefaultCatalog>
    - 
    --The number of seconds to wait after logout before sending the user to
    --the login page. By default, 1 second, though you may want to increase
    --this if you display additional information on the logout page.
    -+This provides the default catalog after a user initially logs in.
    -+However, the default catalog is "sticky," and so will remember the
    -+last-selected catalog thereafter.
    - 
    - =cut
    - 
    --Set($LogoutRefresh, 1);
    -+# Set($DefaultCatalog, 'General assets');
    - 
    --=item C<$WebSecureCookies>
    -+=item C<$AssetSearchFields>
    - 
    --By default, RT's session cookie isn't marked as "secure". Some web
    --browsers will treat secure cookies more carefully than non-secure
    --ones, being careful not to write them to disk, only sending them over
    --an SSL secured connection, and so on. To enable this behavior, set
    --C<$WebSecureCookies> to 1.  NOTE: You probably don't want to turn this
    --on I<unless> users are only connecting via SSL encrypted HTTPS
    --connections.
     +Specifies which fields of L<RT::Asset> to match against and how to match
     +each field when performing a quick search on assets.  Valid match
     +methods are LIKE, STARTSWITH, ENDSWITH, =, and !=.  Valid search fields
    @@ -3249,27 +3245,26 @@
      
      =cut
      
    --Set($WebSecureCookies, 0);
    +-Set($UserAutocreateDefaultsOnLogin, undef);
     +Set($AssetSearchFields, {
     +    id          => '=',
     +    Name        => 'LIKE',
     +    Description => 'LIKE',
     +});
      
    --=item C<$WebHttpOnlyCookies>
    +-=item C<$WebSessionClass>
     +=item C<$AssetSearchFormat>
      
    --Default RT's session cookie to not being directly accessible to
    --javascript.  The content is still sent during regular and AJAX requests,
    --and other cookies are unaffected, but the session-id is less
    --programmatically accessible to javascript.  Turning this off should only
    --be necessary in situations with odd client-side authentication
    --requirements.
    +-C<$WebSessionClass> is the class you wish to use for storing sessions.  On
    +-MySQL, Pg, and Oracle it defaults to using your database, in other cases
    +-sessions are stored in files using L<Apache::Session::File>. Other installed
    +-Apache::Session::* modules can be used to store sessions.
     +The format that results of the asset search are displayed with.  This is
     +either a string, which will be used for all catalogs, or a hash
     +reference, keyed by catalog's name/id.  If a hashref and neither name or
     +id is found therein, falls back to the key ''.
    -+
    + 
    +-    Set($WebSessionClass, "Apache::Session::File");
     +If you wish to use the multiple catalog format, your configuration would look
     +something like:
     +
    @@ -3281,7 +3276,7 @@
      
      =cut
      
    --Set($WebHttpOnlyCookies, 1);
    +-Set($WebSessionClass, undef);
     +# loc('Related tickets')
     +Set($AssetSearchFormat, q[
     +    '<a href="__WebHomePath__/Asset/Display.html?id=__id__">__Name__</a>/TITLE:Name',
    @@ -3293,18 +3288,20 @@
     +    '__ActiveTickets__ __InactiveTickets__/TITLE:Related tickets',
     +]);
      
    --=item C<$MinimumPasswordLength>
    +-=item C<%WebSessionProperties>
     +=item C<$AssetSummaryFormat>
      
    --C<$MinimumPasswordLength> defines the minimum length for user
    --passwords. Setting it to 0 disables this check.
    +-C<%WebSessionProperties> is the hash to configure class L</$WebSessionClass>
    +-in case custom class is used. By default it's empty and values are picked
    +-depending on the class. Make sure that it's empty if you're using DB as session
    +-backend.
     +The information that is displayed on ticket display pages about assets
     +related to the ticket.  This is displayed in a table beneath the asset
     +name.
      
      =cut
      
    --Set($MinimumPasswordLength, 5);
    +-Set( %WebSessionProperties );
     +Set($AssetSummaryFormat, q[
     +    '<a href="__WebHomePath__/Asset/Display.html?id=__id__">__Name__</a>/TITLE:Name',
     +    Description,
    @@ -3315,22 +3312,26 @@
     +    '__ActiveTickets__ __InactiveTickets__/TITLE:Related tickets',
     +]);
      
    --=back
    +-=item C<$AutoLogoff>
     +=item C<$AssetSummaryRelatedTicketsFormat>
      
    --=head2 External Authentication and Authorization
    +-By default, RT's user sessions persist until a user closes his or her
    +-browser. With the C<$AutoLogoff> option you can setup session lifetime
    +-in minutes. A user will be logged out if he or she doesn't send any
    +-requests to RT for the defined time.
     +The information that is displayed on ticket display pages about tickets
     +related to assets related to the ticket.  This is displayed as a list of
     +tickets underneath the asset properties.
      
    --RT has a built-in module for integrating with a directory service like
    --LDAP or Active Directory for authentication (login) and authorization
    --(enabling/disabling users and setting user attributes). The core configuration
    --settings for the service are listed here. Additional details are available
    --in the L<RT::Authen::ExternalAuth> module documentation.
    -+=cut
    - 
    --=over 4
    + =cut
    + 
    +-Set($AutoLogoff, 0);
    +-
    +-=item C<$LogoutRefresh>
    +-
    +-The number of seconds to wait after logout before sending the user to
    +-the login page. By default, 1 second, though you may want to increase
    +-this if you display additional information on the logout page.
     +Set($AssetSummaryRelatedTicketsFormat, q[
     +    '<a href="__WebPath__/Ticket/Display.html?id=__id__">__id__</a>',
     +    '(__OwnerName__)',
    @@ -3339,151 +3340,244 @@
     +    Status,
     +]);
      
    +-=cut
    ++=item C<$AssetBasicCustomFieldsOnCreate>
    + 
    +-Set($LogoutRefresh, 1);
    ++Specify a list of Asset custom fields to show in "Basics" widget on create.
    + 
    +-=item C<$WebSecureCookies>
    ++e.g.
    + 
    +-By default, RT's session cookie isn't marked as "secure". Some web
    +-browsers will treat secure cookies more carefully than non-secure
    +-ones, being careful not to write them to disk, only sending them over
    +-an SSL secured connection, and so on. To enable this behavior, set
    +-C<$WebSecureCookies> to 1.  NOTE: You probably don't want to turn this
    +-on I<unless> users are only connecting via SSL encrypted HTTPS
    +-connections.
    ++Set( $AssetBasicCustomFieldsOnCreate, [ 'foo', 'bar' ] );
    + 
    + =cut
    + 
    +-Set($WebSecureCookies, 0);
    ++# Set($AssetBasicCustomFieldsOnCreate, undef );
    + 
    +-=item C<$WebHttpOnlyCookies>
    ++=back
    + 
    +-Default RT's session cookie to not being directly accessible to
    +-javascript.  The content is still sent during regular and AJAX requests,
    +-and other cookies are unaffected, but the session-id is less
    +-programmatically accessible to javascript.  Turning this off should only
    +-be necessary in situations with odd client-side authentication
    +-requirements.
    ++=head2 Message box properties
    + 
    +-=cut
    ++=over 4
    + 
    +-Set($WebHttpOnlyCookies, 1);
    ++=item C<$MessageBoxWidth>, C<$MessageBoxHeight>
    + 
    +-=item C<$MinimumPasswordLength>
    ++For message boxes, set the entry box width, height and what type of
    ++wrapping to use.  These options can be overridden by users in their
    ++preferences.
    + 
    +-C<$MinimumPasswordLength> defines the minimum length for user
    +-passwords. Setting it to 0 disables this check.
    ++When the width is set to undef, no column count is specified and the
    ++message box will take up 100% of the available width.  Combining this
    ++with HARD messagebox wrapping (below) is not recommended, as it will
    ++lead to inconsistent width in transactions between browsers.
    ++
    ++These settings only apply to the non-RichText message box.  See below
    ++for Rich Text settings.
    + 
    + =cut
    + 
    +-Set($MinimumPasswordLength, 5);
    ++Set($MessageBoxWidth, undef);
    ++Set($MessageBoxHeight, 15);
    + 
    +-=back
    ++=item C<$MessageBoxRichText>
    + 
    +-=head2 External Authentication and Authorization
    ++Should "rich text" editing be enabled? This option lets your users
    ++send HTML email messages from the web interface.
    + 
    +-RT has a built-in module for integrating with a directory service like
    +-LDAP or Active Directory for authentication (login) and authorization
    +-(enabling/disabling users and setting user attributes). The core configuration
    +-settings for the service are listed here. Additional details are available
    +-in the L<RT::Authen::ExternalAuth> module documentation.
    ++=cut
    + 
    +-=over 4
    ++Set($MessageBoxRichText, 1);
    + 
     -=item C<$ExternalSettings>
    -+=item C<$AssetBasicCustomFieldsOnCreate>
    ++=item C<$MessageBoxRichTextHeight>
      
     -This option, along with the following options, activate and configure authentication
     -via a resource external to RT. All of the configuration for your external authentication
     -service, like LDAP or Active Directory, are defined in a data structure in this option.
     -You can find full details on the configuration
     -options in the L<RT::Authen::ExternalAuth> documentation.
    -+Specify a list of Asset custom fields to show in "Basics" widget on create.
    -+
    -+e.g.
    -+
    -+Set( $AssetBasicCustomFieldsOnCreate, [ 'foo', 'bar' ] );
    ++Height of rich text JavaScript enabled editing boxes (in pixels)
      
      =cut
      
     -# No defaults are set for ExternalAuth because this is an optional feature.
    -+# Set($AssetBasicCustomFieldsOnCreate, undef );
    ++Set($MessageBoxRichTextHeight, 200);
      
     -=item C<$ExternalAuthPriority>
    -+=back
    ++=item C<$MessageBoxIncludeSignature>
      
     -Sets the priority of authentication resources if you have multiple configured.
     -RT will attempt authorization with each resource, in order, until one succeeds or
     -no more remain. See L<RT::Authen::ExternalAuth> for details.
    -+=head2 Message box properties
    ++Should your users' signatures (from their Preferences page) be
    ++included in Comments and Replies.
      
     -=item C<$ExternalInfoPriority>
    -+=over 4
    ++=cut
      
     -Sets the order of resources for querying user information if you have multiple
     -configured. RT will query each resource, in order, until one succeeds or
     -no more remain. See L<RT::Authen::ExternalAuth> for details.
    -+=item C<$MessageBoxWidth>, C<$MessageBoxHeight>
    ++Set($MessageBoxIncludeSignature, 1);
      
     -=item C<$UserAutocreateDefaultsOnLogin>
    -+For message boxes, set the entry box width, height and what type of
    -+wrapping to use.  These options can be overridden by users in their
    -+preferences.
    ++=item C<$MessageBoxIncludeSignatureOnComment>
      
     -A hashref of options to set for users who are autocreated on login via
     -ExternalAuth. For example, you can automatically make "Privileged" users
     -who were authenticated and created from LDAP or Active Directory.
     -See L<RT::Authen::ExternalAuth> for details.
    -+When the width is set to undef, no column count is specified and the
    -+message box will take up 100% of the available width.  Combining this
    -+with HARD messagebox wrapping (below) is not recommended, as it will
    -+lead to inconsistent width in transactions between browsers.
    ++Should your users' signatures (from their Preferences page) be
    ++included in Comments. Setting this to 0 overrides
    ++C<$MessageBoxIncludeSignature>.
      
     -=item C<$AutoCreateNonExternalUsers>
    -+These settings only apply to the non-RichText message box.  See below
    -+for Rich Text settings.
    ++=cut
      
     -Users should still be autocreated by RT as internal users if they
     -fail to exist in an external service; this is so requestors who
     -are not in LDAP can still be created when they email in.
     -See L<RT::Authen::ExternalAuth> for details.
    -+=cut
    - 
    --=back
    -+Set($MessageBoxWidth, undef);
    -+Set($MessageBoxHeight, 15);
    ++Set($MessageBoxIncludeSignatureOnComment, 1);
    + 
    + =back
      
     -=head2 Syncing Users and Groups with LDAP or AD
    -+=item C<$MessageBoxRichText>
    - 
    +-
     -In addition to the authentication services described above, RT also
     -has a utility you can schedule to periodicially sync from your
     -directory service additional user attributes, new users,
     -disabled users, and group membership. Options for the
     -LDAPImport tool are listed here. Additional information is
     -available in the L<RT::LDAPImport> documentation.
    -+Should "rich text" editing be enabled? This option lets your users
    -+send HTML email messages from the web interface.
    - 
    --=over 4
    ++=head2 Attach Files
    + 
    + =over 4
    + 
    +-=item C<$LDAPHost>
    ++=item C<$PreferDropzone>
    + 
    +-Your LDAP server hostname.
    ++By default, RT uses Dropzone to attach files if possible. If
    ++C<$PreferDropzone> is set to 0, RT will always use plain file inputs.
    + 
    +-=item C<$LDAPUser>
     +=cut
      
    --=item C<$LDAPHost>
    -+Set($MessageBoxRichText, 1);
    - 
    --Your LDAP server hostname.
    -+=item C<$MessageBoxRichTextHeight>
    - 
    --=item C<$LDAPUser>
    -+Height of rich text JavaScript enabled editing boxes (in pixels)
    - 
     -The LDAP user to log in with.
    ++Set($PreferDropzone, 1);
    + 
    +-=item C<$LDAPOptions>
    ++=back
    + 
    +-LDAP options that are supported by the L<Net::LDAP> new method.
    ++=head2 Transaction search
    + 
    +-Example:
    ++=over 4
    + 
    +-    Set($LDAPOptions, [ port => 636 ]);
    ++=item C<%TransactionDefaultSearchResultFormat>
    + 
    +-=item C<$LDAPPassword>
    ++C<%TransactionDefaultSearchResultFormat> is the default format for RT
    ++transaction search results for various object types. Keys are object types
    ++like C<RT::Ticket>, values are the format string.
    + 
    +-Password for LDAPUser.
     +=cut
      
    --=item C<$LDAPOptions>
    -+Set($MessageBoxRichTextHeight, 200);
    - 
    --LDAP options that are supported by the L<Net::LDAP> new method.
    -+=item C<$MessageBoxIncludeSignature>
    - 
    --Example:
    -+Should your users' signatures (from their Preferences page) be
    -+included in Comments and Replies.
    - 
    --    Set($LDAPOptions, [ port => 636 ]);
    -+=cut
    - 
    --=item C<$LDAPPassword>
    -+Set($MessageBoxIncludeSignature, 1);
    - 
    --Password for LDAPUser.
    -+=item C<$MessageBoxIncludeSignatureOnComment>
    - 
     -=item C<$LDAPFilter>
    -+Should your users' signatures (from their Preferences page) be
    -+included in Comments. Setting this to 0 overrides
    -+C<$MessageBoxIncludeSignature>.
    ++Set(%TransactionDefaultSearchResultFormat,
    ++    'RT::Ticket' => qq{
    ++        '<B><A HREF="__WebPath__/Transaction/Display.html?id=__id__">__id__</a></B>/TITLE:ID',
    ++        '<B><A HREF="__WebPath__/Ticket/Display.html?id=__ObjectId__">__ObjectId__</a></B>/TITLE:Ticket',
    ++        '__Description__',
    ++        '<small>__OldValue__</small>',
    ++        '<small>__NewValue__</small>',
    ++        '<small>__Content__</small>',
    ++        '<small>__CreatedRelative__</small>',
    ++   },
    ++);
      
     -The filter to use when querying LDAP for the set of users to sync.
    -+=cut
    ++=item C<%TranactionDefaultSearchResultOrderBy>
      
     -=item C<$LDAPMapping>
    -+Set($MessageBoxIncludeSignatureOnComment, 1);
    ++What Transactions column should we order by for RT Transaction search
    ++results for various object types.  Keys are object types like C<RT::Ticket>,
    ++values are the column names.
      
     -Mapping to apply between LDAP attributes retrieved and RT user
     -record attributes. See the L<RT::LDAPImport> documentation
     -for details.
    -+=back
    ++Defaults to I<id>.
      
     -=item C<$LDAPGroupBase>
    -+=head2 Attach Files
    ++=cut
      
     -The base for the LDAP group search.
    -+=over 4
    ++Set( %TransactionDefaultSearchResultOrderBy, 'RT::Ticket' => 'id' );
      
     -=item C<$LDAPGroupFilter>
    -+=item C<$PreferDropzone>
    ++=item C<%TransactionDefaultSearchResultOrder>
      
     -The filter to use when querying LDAP for groups to sync.
    -+By default, RT uses Dropzone to attach files if possible. If
    -+C<$PreferDropzone> is set to 0, RT will always use plain file inputs.
    ++When ordering RT Transaction search results by
    ++C<%TransactionDefaultSearchResultOrderBy>, should the sort be ascending
    ++(ASC) or descending (DESC).  Keys are object types like C<RT::Ticket>,
    ++values are either "ASC" or "DESC".
      
     -=item C<$LDAPGroupMapping>
    -+=cut
    ++Defaults to I<ASC>.
      
     -Mapping to apply between LDAP group member attributes retrieved and
     -RT groups. See the L<RT::LDAPImport> documentation
     -for details.
    -+Set($PreferDropzone, 1);
    ++=cut
    ++
    ++Set( %TransactionDefaultSearchResultOrder, 'RT::Ticket' => 'ASC' );
    ++
    ++=item C<%TransactionShowSearchResultCount>
    ++
    ++Display search result count on transaction lists.  Keys are object types
    ++like C<RT::Ticket>, values are either 1 or 0.
    ++
    ++Defaults to 1 (show them).
    ++
    ++=cut
    ++
    ++Set( %TransactionShowSearchResultCount, 'RT::Ticket' => 1 );
      
      =back
      
    @@ -3594,7 +3688,7 @@
      
     -=back
     +=item C<$TrustHTMLAttachments>
    - 
    ++
     +If C<TrustHTMLAttachments> is not defined, we will display them as
     +text. This prevents malicious HTML and JavaScript from being sent in a
     +request (although there is probably more to it than that)
    @@ -3610,32 +3704,32 @@
      
     +=cut
      
    ++Set($AlwaysDownloadAttachments, undef);
    + 
     -=head1 Date and time handling
    -+Set($AlwaysDownloadAttachments, undef);
    ++=item C<$AttachmentListCount>
      
     -=over 4
    -+=item C<$AttachmentListCount>
    - 
    --=item C<$DateTimeFormat>
     +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
     +all attachments. A value of C<0> means show no attachments by default.
      
    +-=item C<$DateTimeFormat>
    ++=cut
    + 
     -You can choose date and time format.  See the "Output formatters"
     -section in perldoc F<lib/RT/Date.pm> for more options.  This option
     -can be overridden by users in their preferences.
    -+=cut
    ++Set($AttachmentListCount, undef);
      
     -Some examples:
    -+Set($AttachmentListCount, undef);
    ++=item C<$PreferRichText>
      
     -C<Set($DateTimeFormat, "LocalizedDateTime");>
     -C<Set($DateTimeFormat, { Format => "ISO", Seconds => 0 });>
     -C<Set($DateTimeFormat, "RFC2822");>
     -C<Set($DateTimeFormat, { Format => "RFC2822", Seconds => 0, DayOfWeek => 0 });>
    -+=item C<$PreferRichText>
    -+
     +By default, RT shows rich text (HTML) messages if possible.  If
     +C<$PreferRichText> is set to 0, RT will show plain text messages in
     +preference to any rich text alternatives.
    @@ -4300,3 +4394,4 @@
      
      =cut
      
    +
--:  ------- > 32: 1fbdc88aa3 Fix typo of "TransactionDefaultSearchResultOrderBy"
--:  ------- > 33: 8032bab90d Clean up items that simply use default widget from config meta
--:  ------- > 34: 0110c89fb1 Use select widget for DefaultCatalog for better user experience
--:  ------- > 35: 9d17cea2fd Move "Must modify" message up to be right under the option it's talking about
--:  ------- > 36: 4db1b0b6e6 Line up the top menu option on left with the top of config box on the right
--:  ------- > 37: 83a03d882c Add $LabelCols and $ValueCols to easily customize cols for label/value
--:  ------- > 38: d7f67c7c8c Switch to 4/8 of label/value layout considering we have long option names



More information about the rt-commit mailing list