RT 3.6.6rc1 now available

I’m pleased to announce the first release candidate of RT 3.6.6.

This release focuses mostly on performance improvements. The big
changes are:

  • CSS and javascript files should be better cached on the client
  • CSS files are now concatenated and squished to cut down on the number
    of initial HTTP requests
  • ACL queries have been split apart into more small queries, which leads
    to more effective caching and has better performance characteristics
    on MySQL 5.x

There’s also some refactoring work going on to improve our support for
HTML mail. But more on that later.




  • Japanese translation updates from Shinji Yamane - jesse

  • Updated dutch .po file from Marcel Kolkman - jesse


  • We used the wrong variable name in html/Search/Chart (for fonts)
    Thanks to
    elacour at easter-eggs.com - jesse


  • Add new dep: CSS::Squish 0.06 - audreyt

  • bump required version of SB so people will get a fix that affect the
    change - ruz


  • RT::I18N - Introduce a new utility function, IsTextualContentType($type),
    that determines whether $type can be sensibly converted to Unicode text.
    Currently it uses this regex (case-insensitively):
    ^(?:text/(?:plain|html)|message/rfc822)\b The idea is to unify all the
    inconsistent uses all over RT’s code (some tested for text/, some for
    text/plain|message/rfc822, some for text/plain|text/html|message/
    to use
    this function instead.

  • Minor POD glitch - Say “function” when it said “method” but really
    wasn’t. - audreyt

  • RT::Transaction_Overlay: Be saner and allows explicitly calling $txn-

    Content(Type => ‘text/html’), instead of relying on action-at-a-distance
    $PreferredContentType. - audreyt

  • MakeMIMEEntity now takes an optional “Type” field to denote the MIME Type
    of the body. (Default to ‘text/plain’.)

  • CreateTicket() now supports $ARGS{ContentType}, and
    now supports $ARGS{UpdateContentType}. - audreyt

  • RFC dictates to encode by chars, so if char is two octets then it MUST be
    in one chunk - ruz

  • RT::Action::SendEmail - Support for multipart/* emails; we now textualify
    all MIME parts, instead of collapsing the whole multipart. - audreyt

  • RT::Action::SendEmail: Allow user-specified Content-Type in outgoing
    templates. Currently, only text/* is supported for security reasons.
    Eventually maybe multipart/* with all textual subparts might be allowed,
    too. - audreyt

  • RT::Attachment_Overlay - Fix several broken logic in ->OriginalContent:

    • When $self->ContentEncoding eq ‘quoted-printable’, a premature
      “return” prevented any encoding conversion from taking place.
    • A bogus Encode::_utf8_on($content) later prevented any encoding
      conversion from taking place anyway.
  • $attachment->Quote now respects RT::I18N::IsTextualContentType. - audreyt

  • RT::Transaction->ContentObj - Prefer the first part that matches
    $PreferredContentType, instead of always ‘text/plain’. - audreyt

  • RT::Transaction_Overlay - use RT::I18N::IsTextualContentType. - audreyt

  • RT::Transaction_Overlay: Signatures in text/html content objects
    should be
    removed in a way that doesn’t depend on whitespace. Also, remove an
    unneccessary regex capture. - audreyt

  • RT::Transaction_Overlay: Unify the idea of “textual” MIME types to
    text/plain, text/html and message/*. (Previously it was defined
    for e.g. the first part and the other parts.)

  • RT::Transaction_Overlay: Introduce the variable
    $RT::Transaction::PreferredContentType to control the context
    where ->Content() is evaluated in. If not set, it defaults
    to text/plain. - audreyt


  • HTML Table fixes from Dirk Pape
    xhtml-2.patch) - jesse

  • In this case the

      was opened inside an IF block, but
    outside the IF block. Thanks to Jason Long. - ruz

  • The opening tag came before the IF statement, and the
    closing tag was inside the IF statement. Thanks to Jason Long. - ruz

  • convert mason comments into css comments - ruz

  • delete double width definition

  • don’t escape html - ruz

  • delete unused variable - ruz

  • handle spaces in field names when doing rt ls - falcone

  • move general if block into <%INIT> - ruz

  • pass a reference to @results into a callback, so extensions can fill it -

  • squish our CSS into one big thing use CSS::Squish and dhandler - ruz


  • add max-age to HTTP Caching “Expires” header - ruz

  • Don’t send Last-Modified field in a response when it’s not necessary

  • Explicitly mark our static files like css and js as publicly
    cacheable - ruz


  • A small fix to stop RT from complaining about categories when updating
    custom fields via the web ui. Thanks to Brian Gallew - jesse

  • add Ticket/Elements/ShowQueue and use it on create and in ShowBasics,
    comp for overriding in extensions - ruz

  • add closing tags for elements of lists - ruz

  • add handling of arguments with multiple values into
    Widgets/SavedSearch - ruz

  • add labeling of portlets that are based on components, it doesn’t support
    localization, but it’s better than empty label

  • allow to manage many portlets that are based on the same
    comp by adding optional ‘id’ key - ruz

  • add missing

  • - ruz

  • set the prefix so that CFs can be added during Group Creation - falcone

  • switch to /Elements/ShowLink - ruz

  • In charts, if there are no tickets found in a search, give an error-
    message image instead of silently failing to load. - sartak

  • add a callback for SelfService/Elements/Tabs - sunnavy

  • added AfterShowHistory Callback in Ticket/History.html - sunnavy

  • added current_tab arg for AfterShowHistory Callback in
    Ticket/Display.html - sunnavy

  • added show_menu arg for Elements/Tabs and Elements/PageLayout, mainly for
    RTx-TicketBottomTabs - sunnavy

  • When creating or updating a ticket, we shouldn’t replace “\n” with
    whitespace if it’s a multiple-value custom field type - sunnavy


  • split _HasRight into _HasGroupRight and _HasRoleRight

  • use more queries for roles (sounds like a performance lose but is
    really a win) - ruz

  • split WhoHaveRoleRights into more queries so buggy MySQL’s optimizer
    can do
    the right thing - ruz

  • unshift more global objects instead of pushing them, so we’ll get them
    earlier in an upcoming refactoring

  • do all things related to EquivObjects in HasRight and leave only
    checks in _HasRight - ruz

Jesse Vincent wrote:

I’m pleased to announce the first release candidate of RT 3.6.6.

I’ve been running 3.6.6RC1 here for a couple weeks… no problems

Jason Long
Messiah College