[Rt-announce] RT 3.6.0 Released

Jesse Vincent jesse at bestpractical.com
Thu Jun 15 07:49:05 EDT 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

- -----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Live from the Nordic Perl Workshop, it gives me great pleasure to  
announce the immediate release of RT 3.6.0. This release features a  
number of really exciting changes, as well as a large number of not- 
so-exciting improvements and bug fixes. This release is the result of  
three separate lines of development over more than a year.


Within several minutes, the release should be available from:

http://download.bestpractical.com/pub/rt/release/rt-3.6.0.tar.gz

The distribution's PGP signature will be available at:

http://download.bestpractical.com/pub/rt/release/rt-3.6.0.tar.gz.sig

Below, you'll find an annotated change log and release notes list.  
I'd like to extend my gratitude to the many, many individuals and  
organizations who have contributed to this release. In particular,  
I'd like to thank Kevin Riggle for his work building the change log  
below.

This summer marks RT's 10th birthday and I'm absolutely thrilled to  
be able to release RT 3.6.0
to commemorate the occasion

This is, by far, the most significant new release of RT since version  
3.0 and is, by far, the release of RT that features the most code  
written by developers other than myself. I am constantly humbled and  
amazed by the strength and diversity of the RT community.


Best,

Jesse Vincent
Best Practical


Exciting New Features
- - -------------------------------

Redid the RT UI in XHTML and CSS.  Made sure the UI fails
gracefully in less-featureful browsers.  Gave RT a clean new look with
the 3.5-default stylesheet, but also added a 3.4-compatability
stylesheet to closely mimic the visual style of RT 3.4.

Gave users the ability to customize their RT home page with boxes
containing their saved searches, lists of their queues and tickets,
and their Reminders.

Gave users the ability to set their default search preferences -- how
many rows per page to display, what fields to display, and how to
order the tickets.

Introduced basic reporting and charting.

Added Reminders on tickets.

Added the ability to make custom fields link to and include content
from other systems.

Added bulk update of custom fields.

Security
- - --------

Changed /^$foo$/ regexes to 'eq $foo' to prevent regex insertion
exploits.

Core
- - ----

Made general improvements to the documentation, fixed typos, added
comments, ran perltidy, and generally tried to make the code cleaner
and more understanable.

Updated a number of module version dependencies, including
DBIx::SearchBuilder, XML::RSS.

RT-Ticket: 6713   Added dependencies on Text::WikiFormat,
Calendar::Simple

RT-Ticket: 6491   Updated the Postgres dependency.

Made global pre-defined searches into attributes of RT::System.

Made saving a search to RT::System work.

Made SeeQueue permission filtering happen in AddRecord so both Next()
and ItemsArrayRef work.

Added an OwnGroups method in User_Overlay.pm to get a collection of
groups of which the user is a member.

Revamped ObjectTypeStr in RT::Record according to suggestions.

Introduced basic reporting functionality to RT.

Improved reporting functionality to group by day, month, and year.

Fixed "group by id" in reports, which was broken by refactoring.

Added an AsHREF method RT::URI, as per the promised Links API.

Generalized Elements/QueryString to work with arrays in %ARGS.

Compensate if ->Resolver isn't a valid object when trying to resolve a
URI.

Changed "Updated FM" to "Updated Article" in RT::Record.

Added the total number of tickets found to the statistical reports.

Added autohandler code to deal properly with fractional units of time.

Clarified the documentation and added tests for RT::Record-
 >FirstAttribute.  Thanks to Todd Chapman.

Fixed the autohandler that serves out images on misconfigured or
downlevel platforms.

Cleaned up how the content-type is set for CSS and JavaScript.

Conquered a redirect bug at long last; perlbug #17650 was the culprit.

Removed two duplicate methods in lib/RT/User_Overlay.pm.  Discovered
and patched by Joby Walker.

Changed RT::Record to use the server-side function to lowercase
values, if the Handle will give us one.  Thanks to Tom Yu.

Added EquivObjects support for ACL queries.  Thanks to Todd Chapman.

Replaced %FIELDS in Tickets_Overlay.pm (which has pseudohash meaning)
with %FIELD_METADATA.

Changed the joins for sorting watchers and group members on a ticket
to a left join.

Applied merge bugfixes.  Thanks to Jeff Voskamp and Joe Micciche.

Changed webmux.pl to process the JavaScript files with Mason.

Gave the algorithm for picking transaction content a reasonable-enough
fallback case.

Changed Ticket_Overlay.pm to check the PrincipalId it gets to do the
right thing if it's our own email address, instead of our own
principal.

Removed an unneeded join to attachments in Ticket_Overlay.pm.

RT-Ticket: 7149   Cleaned up attachment creation in
lib/RT/Attachment_Overlay.pm.  Thanks to Ruslan Zakirov.

RT-Ticket: 7143   Made minor cleanups to RT::Record.  Thanks to Ruslan
Zakirov.

RT-Ticket: 7148   Applied Todd Chapman's patch, which (1) orders user
members of a group by Name, (2) doesn't list them in the select if
they're already a member, and (3) doesn't list the group itself
because a group can't have itself as a member.

Cleaned up the way we were opening files in the image autohandler,
including setting binmode and flushing the buffers to prevent loading
the entire file into memory.

Added support for an optional OPERATOR argument in
LimitLinked(From|To) in Tickets_Overlay.pm, and added this to methods
Limit(HasMemeber|DependsOn|...).

Added support in _LinkLimit for IS NOT NULL queries ala "has at least
one link of defined type".  Also, the operator '!=' didn't work at all
- - -- now it works with the meaning "has no link with defined ticket".

Fixed the things broken by the queries changes, eg. "id = 123 OR
MemberOf = 123".  All breakages were already covered in the tests.

RT-Ticket: 7324   Bumped the Postgres dependency.  Joby Walker at the
University of Washington discovered incorrect ordering behaviour with
DBD::Pg 1.42 and earlier.

Made RT::Record not update the TimeTaken value, if the given
transaction is on something other than a ticket.

Fixed the new sorting behavior so as to not break the Bulk update page
(and by extension, the spreadsheet download).  Thanks to David
Schweikert for the catch.

Made Ticket_Overlay.pm canonicalize a user-supplied email address and
then compare it case-insensitively when checking it against the
current user's email address.

RT::Attachment should only convert attachments if $enc'oding contains
something.

Updated the Create, _?AddLink, and DeleteLink methods in RT::Ticket to
deal properly with the $StrictLinkACL configuration option.

Moved all ACL checks from _AddLink to AddLink in RT::Ticket.

Prevented the re-creation of the transaction if the user tries to
create a link which already exists.

Web UI
- - ------

Applied TitleBox and CSS fixes.  Thanks to Gogod.

Made TitleBox use <div> instead of <table>.

Wrapped a div#all right inside <body> to avoid a margin problem on IE.

Used div.right-column and div.left-column to split columns.

Set up the login form and homepage semantics and associated CSS.

Moved TitleBox to Widgets/

Changed calls to TitleBoxStart + TitleBoxEnd into a single call to
TitleBox which contains the content.

Deprecated TitleBoxStart + TitleBoxEnd.

Allowed users to override the display options for pre-defined
searches.

Allowed users to configure the Quicksearch portlet.

Added the new MyAdminQueues and MySupportQueues portlets.

Allowed users to configure the "RT at a glance" page with pre-defined
searches, allowed components, and saved searches.

Cleaned up Search/Build.html to reduce duplicated code.

Fixed title_right_href in the TitleBox element.

Cleaned up the original Quicksearch to use QueueSummary for summary
portlets.

Fixed a bug where MyRT only got one component in a pane.

Added a SelectionBox Widget which works for both JavaScript and CGI.

Made the front page customization UI use the SelectionBox widget.

Added minimum regression tests for frontpage customization.

Removed all referrers and "go back"s.

Moved selectAll to form onSubmit.

Made SummaryRow a user preference.

Added subtabs to MyRT.

Ensured that the MyRT components selected are within the given
Available ones.

Ensured that permissions are checked when saving searches to
RT::System.

Ensured that permissions are checked with the correct object when
saving a search.

Moved _parse_saved_search and _load_container_object to
RT::Interface::Web.

Made highlighted menu options the right size.

Renamed "My Requests" to "Unowned Tickets".

Allowed AutoSave mode for the SelectionBox widget.

Made the error when a saved search fails more readable and prevented a
deleterious side-effect.

Made the code test if saved search is listed as an available item in
the "RT at a glance" preferences.

Fixed certain search-related actions, which weren't displaying the
page footer due to calls to $m->abort();.

Fixed the bug which prevented displaying the page footer when creating
a ticket.

Refactored bulk update to use more standard components.

Fixed the regexp injecting checkbox into bulk edit format.

Added support for bulk update of custom fields.

Added support for search paging in the bulk update UI.

Significantly cleaned up the search UI.

Fixed the code which builds FormatString to prevent if from html-
escaping loc().

Updated webrt.css to restore the black text color for titleboxright
text.

Made the overview search for stalled tickets in addition to open and
new tickets.

Added support for sorting by requestor/watcher.

Merged forward a clicky-headers fix from 3.4.

Removed "Search by group membership" from search UI, since it hit
horrible scaling issues.

Allowed the user to select minutes or hours when entering time
worked/left/etc.

Allowed click-to-sort on Requestor/Cc/AdminCc.

Added support for search display preferences.

Renamed "Quick Search" to "Simple Search".

Added tabs for SearchOptions.

Renamed "quick" search to "Googlish" search in the code.

Fixed Googleish simple search.

Fixed support for uploading attachmends in SelfService mode.  Thanks
to HC Chien.

Applied an XHTML overhaul from gugod.

Clarified and renamed some buttons in QueryBuilder.

Updated Quicksearch to add Status search and Switch content searches
to subject searches.

Added code to pay attention to the saved search preference for
"Unlimited results per page".

Applied more XHTML fixes.  Thanks to gugod.

Lowercased all HTML tags and attribute names.

Double-quoted attribute values.

Changed <font> -> <span>, <b> -> <strong>, <br> -> <br/>, and <i> ->
<em>.

Provided better defaulting for searching for 'no rows per page'.

Forced the homepage to preserve its format and rows per page when the
user clicks through the Saved Search titlebars.

Added a custom field Category Admin UI.

Added Owner to the ticket basics page.

Reimplemented "Hours/Minutes" selects for time worked/estimated/spent.

Fixed the Combobox layout in w3m.

Added a <label> to html/Elements/Admin/PickObjects

Added supporting JavaScript for the cascaded selectbox.

Removed the Category from Combobox, since it didn't make any sense.

Added support for multiple combo boxes.

Refactored the Combobox into a Widget.

Added a ComboBox for Pattern on the custom field Modify page with
friendly hints.

Added a link into Reminders from Tickets_Overlay.pm.

Refactored out common code for Bulk.html.

Added Combobox handling to Bulk.html.

Relabeled the custom field validation field as "Validation" instead of
"Pattern".

Fixed TimeEstimated and TimeWorked defaulting on the ticket creation
page.  Thanks to John Gedeon.

Made ticket reports grouped by Status show all statuses, even if some
values are 0.

Improved highlighting on the ResolvedByOwner report.

Added all the little images used by the CSS.

Integrated the top actions, menu, logo, footer, and some other stuff
into the new CSS layout.

Modified the page layout to get rid of the pesky horizontal scrollbar.

Fixed a broken callback in Elements/PageLayout.

Changed the EditCustomFieldSelect element to treat empty custom field
categories as empty, not as "the same as above".

Changed the meaning of an empty catagory to "show all", not "show
uncategorised".

Fixed Safari borkenness with the ComboBox element.  Safari segfaults
with .styles.display='none'; switched it to the less pretty but still
workable .styles.visibility='invisible';.

Changed the Reminders element to only update the reminders if we were
actually submitting on them.  Also changed it to not open reminders if
we didn't have a checkbox for them.

Moving the search query into the search body in Search/Chart.

Allowed filtering of custom fields

Removed the newlines from the <input> tags.

Made search-by-any-custom-field work.

Cleaned up custom field-list filtering.

Added a callback to html/Tools/Elements/Tabs.

Attempted to prevent the footer from showing up on redirects on some
servers.

Moved "Owner" to right after "Queue" in the list of Basics to edit.

Move the JavaScript into a separate file.

Added calendar popups for date fields.

Added editing of Reminders.

Gave RT::Date ->Date and ->Time methods.

Added proper separators in the menus.

Fixed the conditional display of the actions menu.

Changed the hideshow() function to return false so the click isn't
passed through after capture and the page doesn't jump to the top.

Fixed hideshow() to make it more generalized as well as more cross-
browser.

Moved all the JavaScript to html/NoAuth/js.

Improved TitleBox rollup/rolldown.

Added class="hidden" to all hidden inputs.

Added class="radio" to all radio inputs.

Added class="checkbox" to all checkbox inputs.

Added class="button" to all submit and reset inputs.

Made some style changes and class-ified a few missed inputs.

Moved the 'Show details'/'Show basics' links to the actions/subactions
menu.  They now work via Javascript and CSS, much like hideshow.  For
users who don't have JavaScript enabled, both basics and details will
be displayed, since a JavaScript onload event is what hides the
details at first.

Ironed out a bunch of cosmetic IE bugs.

Made titleboxes stateful using JavaScript and cookies.  The generated
titlebox IDs should be unique.

Bullet-proofed titlebox ID generation.

Cleaned up how the content-type is set for CSS and JavaScript.

Fixed the styling on /Elements/Login.

Fixed TitleBoxes to do the right side titles as well.

Allowed TitleBoxes to not be hideable (and made this true for the
Login titleboxes).

Removed an unused spacer image

Pulled the Best Practical logo out into a separate element, since it's
being used in two places now.

Documented some of the various CSS tricks used.

Removed $RT::Logger->crit(...) debugging calls from the ticket
creation and display pages.

Fixed the menu arrows to work in IE.

Fixed a mangled TitleBox call in Elements/ShowRequestor which was
preventing hide and show from working.

Styled up the Brief/Full headers links.

Gave default focus to the username field on the login form.

Made the history display nicer looking -- lots of cosmetic changes.

Updated the SimpleSearch form and index.html to use the true simple
search (Search/Simple.html).

Gave semantic meaning to the message stanza coloring.  (It indicates
depth.)

Added an onload hook mechanism in the JavaScript.  Thanks to Robert
Spier.

Fixed the positioning of the hide/show widget in IE6.

Styled approvals and made the approval display much more semantic.

RT-Ticket: 6846   Applied a patch to fix the calendar display.  Thanks
to Kevin Falcone.

RT-Ticket: 6821   Pulled most of the styles out of the JavaScript and
into the forms CSS.

Added a preliminary print stylesheet.

Made the state of rollup links more accessible to users without CSS.

Fixed the statefulness of the titlebox hide/show widget.

Changed CalPopup.html to be a better size and removed its footer.

Added a 3.4-compatability stylesheet, which closely mimics the visual
style of RT 3.4.

Rolled the functionality from RT::Extension::RedirectUnprivilegedUsers
into core RT.  RT now sends unprivileged users who request
Ticket/Display.html addresses to the equivalent
SelfService/Display.html address instead.

Added per-component CSS IDs to the Header element for very specific
styling.

Taged the last <ul> in the system menu with a class for planned future
use in re-structuring the menu CSS.

Attached class="rolled-up" to a more semantic element.

Fixed styles to make transaction subjects no longer look threaded.

Styled titleboxes with a border and background to separate them a
little better from each other.  (rt-devel users noted that there
seemed too much whitespace and not enough distinction.)

Applied a patch to fix the ordering of attachments.  Thanks to Ruslan
Zakirov.

Added a ModifyQuery callback to Search/Simple.html to allow
modification of the query before the Googleish search module gets it.

Cleaned up the SelectQueue element and added caching for performance.

Changed the SelectNewTicketQueue element to use SelectQueue.

Fixed off-by-one numbering on the message stanza coloring.

Only show the 'Edit' action on the index.html page if the user can
ModifySelf.

Applied a patch for cleaner XHTML from Steve Peters.

Added BeforeSessionDelete and AfterSessionDelete callback hooks to
html/NoAuth/Logout.html.

Fixed the ShowMessageStanza element to output newlines as <br />.

Fixed the Menu element to not display empty menus.

Fixed the parsing of message headers in the ShowMessageHeaders element
and cleaned the component up a little.

Added BeforeForm and AfterForm callbacks to the Login element.

Fixed custom field formatting in IE.

Added Ticket/Elements/ShowTime, which cleverly figures out whether
displaying time in hours or minutes is more appropriate, and updated
ShowBasics to use it.

Display "Save" when editing a search even if search isn't dirty, since
can be a rename.

Allowed sorting searches by a custom field.

Allowed sorting searches by multiple custom fields in the UI.

Added support for the PAW search format.  ("In a PAW sort, a sort is
first done based on ownership of the ticket (where all tickets owned
by the user are assigned a 1, all unowned tickets are assigned a 2,
and all remaining tickets are assigned a 3; these values are used for
the first sort), and then a sort is performed based on priority.")

Removed the old right-style menu CSS and made the left-style the
default so it's easier to fiddle with.

Reorganized the whole page header to squash some bugs and make it
function better.

Moved the logo div out of the quickbar and on its own.

Fixed stacked menu spacing in IE.

Added a default callback to html/User/Elements/Tabs.

Fixed up the 3.4-compat styles to account for HTML and CSS changes.

RT-Ticket: 7082   Applied a patch to show queue descriptions in
quicksearch preferences.  Thanks to Joby Walker.

RT-Ticket: 7056   Applied a patch to improve the browser compatibility
of the calendar popup.  Thanks to Peter Popovics.

RT-Ticket: 7053   Cleaned up the titlebox styling in IE.  Thanks to
Peter Popovics.

RT-Ticket: 6762   Changed SelfService/Elements/Tabs to go directly to
the 'Create' page if the user only has access to one queue, instead of
showing the list of queues.  Thanks to Kenneth Marshall.

Cleaned up the logic in ShowHistory.

Added better menu styling, which should eliminate menu wrapping.

Fixed the handling of time units in autohandler -- '1/8' didn't work.

Changed autohandler to only filter arguments once.

Cleaned up the autohandler codepaths.

Made the Name sufix -TimeUnits optional in Elements/SelectTimeUnits.

Removed the -TimeUnits suffix in the files which call SelectTimeUnits.

Added FormLeftColumn, FormRightColumn, and UpdateLogic callbacks to
html/User/Prefs.html to make extending Prefs cleaner.

Added MassageCustomFields callbacks to
Ticket/Elements/EditCustomFields and Elements/ShowCustomFields to make
it easier to hide away a custom field on ticket display/edit.

Added a print stylesheet.  Thanks to Koos van den Hout.

Disambiguated the two copies of Owner in ModifyAll.html.  Also, deal
with the case where the user doesn't change either value.

Patched html/Ticket/Elements/Reminders to correct the following
behaviors -- (1) When maintaining reminders from /Ticket/Display.html,
all reminder subjects for that ticket were being reset to blank when
"Save" was pressed, and (2) When maintaining reminders from
/Ticket/Reminders.html, only one field per reminder would actually be
updated when "Save" was pressed.  Thanks to Mark Roedel.

RT-Ticket: 7150, 7151, 7152, 7153, 7155, 7156, 7157, 7158, 7159, 7160,
7161, 7162, 7164, 7165, 7166   Fixed Mason warnings in:
Elements/CollectionAsTable/Header, Elements/Menu, Elements/MessageBox,
Elements/SelectDate, Elements/SelectWatcherType, Elements/TicketList,
Search/Bulk.html, Search/Elements/BuildFormatString,
Search/Elements/EditSearches, Ticket/Elements/AddWatchers,
Ticket/Elements/ShowTransactionAttachments, Ticket/ModifyAll.html,
Ticket/Reminders.html, Tools/Offline.html, and Widgets/TitleBox.
Thanks to Jim Meyer.

Added addClass and delClass JavaScript functions.

Removed style.display=[none,block] calls.

Added the setCheckbox(form, name, state) function that sets all
checkbox inputs under the form element with the defined name to the
state.

Updated the Submit element to make use of the new changes.

Fixed the indentation of Elements/EditCustomFieldSelect.  Thanks to
Jim Meyer.

Applied the bits of Jim Meyer's 'fixes' patch to
Elements/EditCustomFieldSelect which still seemed relevant.

RT-Ticket: 7154   Silenced warnings in Search/Results.html.  Thanks to
Jim Meyer.

Cleaned up html/Elements/ListActions based on a patch from Ruslan
Zakirov.

Explicitly set the background to white.

Added a FormStart callback to Ticket/Create.html, Modify.html,
ModifyAll.html, ModifyDates.html, ModifyLinks.html, ModifyPeople.html,
and Update.html.

Added a default callback to ModifyAll.html, ModifyDates.html, and
ModifyPeople.html for great justice.

Updated Reminder editing to reflect API changes.

Wrapped the mason directive for setting the content-type in ahah.js in
a Javascript comment.

Tried to make rt.js do the right thing with headers.

Made the ShowCustomFields element open links to other systems in new
windows.

Fixed the whitespace in Results.tsv, and changed the header to list
custom fields as CF-...

Changed the offline upload parser to try to treat date as ISO first,
falling back to unknown.

Kept the offline upload form from tacking on an extra newline on each
submit.

Minimized yo-yo-ing of status when uploading if possible.

Allowed false values as possible values in uploads, as long as they're
defined.

Allowed Cc, AdminCc, and Requestor to be either email addresses or
users in uploads.

Changed RT::Action::CreateTicket to accept either the singular or the
plural form of Requestor, Cc, and AdminCc.

Added a Titlebox component for compatibility with 3.4.

Added Titlebox wrappers for 3.4 compatibility

RT-Ticket: 7424   Applied a patch to remove duplicate class="..." in
the CSS.  Thanks to Todd Chapman.

RT-Ticket: 7415   Removed a bunch of invalid slash (/) characters from
titlebox IDs in the CSS.

Allowed multiple-OrderBy searches.

Fixed multiple OrderBy's on edit.

Applied a HTML arrow cleanup.  Thanks to Joshua Colson.

Changed Elements/SelectQueue to cache in the session instead of the
mason cache.

Changed the last 'elsif' into an 'else' in Ticket/Elements/ShowTime,
which ensures that the time is still displayed, even if we can't do
clever things with it.

Patched the Ticket page not to link you to the Admin/Users/Modify.html
page if you don't have the AdminUsers privilege, since otherwise you'd
just get a blank page.  Thanks to David Schweikert.

Addded spaces around the Left, Right, Up, and Down arrows on the
EditFormat and EditQuery elements and the SelectionBox widget because
of a bug in WWW::Mechanize (see
http://rt.cpan.org/Ticket/Display.html?id=18921).

Changed html/Search/Chart to display GIFs If the system GD library
can't display PNGs.

RT-Ticket: 7511   Applied a patch to add EditComponentName and
ShowComponentName callbacks to the EditCustomField and ShowCustomField
elements, respectively.  Thanks to Todd Chapman.

Fixed some horizontal scrolling problems.  (The query builder will
still cause horizontal scroll if the window isn't wide enough, as a
result of its layout.)

Made the quick ticket creation widget set the requestor to the current
user.

Fixed the SelectNewTicketQueue element to default properly.

Included the Cc and AdminCc fields in the CSV download.

Changed the ticket history to attempt to downsample HTML-only e-mail
messages into plain text.

Search
- - ------

Made saving a search to RT::System work.

Significantly cleaned up the search UI.

Removed "Search by group membership" from search UI, since it hit
horrible scaling issues.

Renamed "quick" search to "Googlish" search in the code.

Fixed Googleish simple search.

Clarified and renamed some buttons in QueryBuilder.

Added FullText search back to simple search.

Fixed a Simple Search bug which occurred when searching by multiple
values of one criterion.

Fixed an error message level in SavedSearch to be less noisy.

Moving the search query into the search body in Search/Chart.

Made search-by-any-custom-field work.

Updated the SimpleSearch form and index.html to use the true simple
search (Search/Simple.html).

Fixed clause-addition in Query Builder to account for custom fields,
which don't match /\w+/.

Added a ModifyQuery callback to Search/Simple.html to allow
modification of the query before the Googleish search module gets it.

Display "Save" when editing a search even if search isn't dirty, since
can be a rename.

Change the Quicksearch element to escape quotes and slashes in
TicketSQL and then URI escape.  Also turned off the automatic HTML
escaping that Mason does so the query isn't TicketSQL-HTML-URI
escaped.

Allowed sorting searches by a custom field.

Allowed sorting searches by multiple custom fields in the UI.

Added support for the PAW search format.  ("In a PAW sort, a sort is
first done based on ownership of the ticket (where all tickets owned
by the user are assigned a 1, all unowned tickets are assigned a 2,
and all remaining tickets are assigned a 3; these values are used for
the first sort), and then a sort is performed based on priority.")

Fixed searching by owner's fields.  Now owner is now WATCHERFIELD
instead of an ENUM.

Added a backward compatible variant for Owner, so 'next' searches
should work.  (When Owner was an ENUM, we could automagically search
for "Owner = 'xxx'" and find the Owner by both id and Name.  We've
preserved this behavior, but it takes more code now.  For other
operators (not '=' or '!='), or when subfield(subkey) is specified,
search on Owner works as for other watchers.)

Fixed searches like "Cc.Name <> 'SomeBody'", which were skipping
tickets with an empty Cc list.

Fixed some of some 'uninitialized' warnings on searches.

Added a test suite for all corner cases of the new watcher-searching
code (22search_tix_by_watcher.t).

Removed debugging lines from 20-sort-by-requestor.t.

Fixed the sort-by-requestor tests to only compare non-nulls, since the
tests would otherwise fail on some database backends because they sort
nulls differently than Perl does.

Fixed Search/Build.html to use the Rows value it gets, instead of
hard-forcing it to 50 all the time.

Fixed searching on global custom fields

Sending and Receiving Email
- - ---------------------------

Changed RT::Action::SendEmail to only hang onto the first four and the
last six References headers when replying.

Added some utility functions in 04send_email.t: first_txn, count_xns,
first_attach and count_attachs.

Used simple file_content function in 04send_email.t instead of `cat`.

Got rid of the 'uninitialized' warnings in RT::Action::SendEmail.

Allowed mail plugins to complete actions in RT::Interface::Email.

Custom Fields
- - -------------

Added support for bulk update of custom fields.

Fixed custom fields to pay attention to defaults, when said defaults
are specified.

`CF.Pattern` now works at the API level.  It rejects invalid regexes
as patterns and validates new CF values against the current pattern.

Added a simple UI to set custom field patterns.

Added Combobox and Cascaded custom field types.

Allowed custom field values to now be integers.

Fixed some bulk custom field deletion issues.

Refactored the Cascaded custom field type.  It now applies to all
Select-ish custom fields by introducing a "Category" member field for
a CFV.

Stubbed out $cfv->Category and $cfv->SetCategory, as well as a $cfv-
 >Create that accepts Category as a key.

Implemented $cfv->Category and $cfv->SetCategory, via attributes.

Introduced a cascaded select field.

Allowed the creation of a custom field with a pattern.

Provided feedback when the user tries to create an invalid custom
field.

Added a custom field Category Admin UI.

Improved the diagnostics on custom field sanity tests.

Added validation for combo fields.

Forced combo fields to never wrap.

Added a ComboBox for Pattern on the custom field Modify page with
friendly hints.

Fixed a system error on bulk update caused by Combobox custom fields.

Relabeled the custom field validation field as "Validation" instead of
"Pattern".

Changed the EditCustomFieldSelect element to treat empty custom field
categories as empty, not as "the same as above".

Changed the meaning of an empty catagory to "show all", not "show
uncategorised".

Cleaned up custom field-list filtering.

Fixed the misvalidation of single-input fields.

Changed the validation code for single-value fields to check that the
empty string is a valid value when the existing value is deleted.
Added regression tests for this.

Added a warning if there are invalid custom fields at ticket-creation
time.

Fixed clause-addition in Query Builder to account for custom fields,
which don't match /\w+/.

Required that the object not only be defined but also valid before
pulling values from it in Elements/EditCustomField.

Added support for named custom fields in templates.

Made CreateTickets handle custom fields.

Provided more flexible support for custom fields whose names contain
dashes and spaces in CreateTickets templates.

Made limiting based on custom fields make sure that the custom fields
in question are on the right queue.  Otherwise negative searches might
be wrong.

Added MassageCustomFields callbacks to
Ticket/Elements/EditCustomFields and Elements/ShowCustomFields to make
it easier to hide away a custom field on ticket display/edit.

Changed ObjectCustomFields to squish out duplicate SortOrders if they
exist; this should be impossible, so the O(n) updates are mostly
justified.

Fixed searching on global custom fields

Added the ability to make custom fields link to and include content
from other systems.

Made the ShowCustomFields element open links to other systems in new
windows.

Fixed a bug that stopped search on global custom fields.

RT-Ticket: 7511   Applied a patch to add EditComponentName and
ShowComponentName callbacks to the EditCustomField and ShowCustomField
elements, respectively.  Thanks to Todd Chapman.

Added failing tests for several custom field searches.

Fixed the custom field searches which were causing the tests to fail.
The CustomFields alias could be undef, we not always join to this
table, and we should cache both aliases we use
(ObjectCustomFieldValues and CustomFields).

Add a test for the CF.{cfname} search format.

Backported CustomFields fixes from 3.7.

Added back the CustomField metafield to fix empty results when sorting
by CF.

Changed RemoveFromObject in CustomField_Overlay.pm to return the value
of the ->Delete call, since it can fail.

Internationalization
- - --------------------

RT-Ticket: 6418, 6123, 6364, 6429, 6322, 6583, 6585, 6517, 6654, 6627,
6897, 6976, 7106, 7090   Updated translations: Hungarian (Vajko
Peter), Dutch (Niels Bakker), Czech (Jan Okrouhly), Italian (Angelo
Turreta), German (Torsten Brumm, David Schmit), French (Michel
Robitaille, Jerome Fenal), Polish (Piotr Sliwa), Spanish (typo fixes,
Leonardo Richero; updated translation, Carlos Velasco), Danish (Jonas
Nielsen), Russian (Andrew Kornilov), Indonesian (James Briggs),
Japanese (Daisuke Maki)

Localised the format in predefined searches with __loc{text}__.

Applied a patch from Jerome Fenal to make extract-message-catalog play
nice with svn checkouts.

RT-Ticket: 7001   Localized "Reports".  Thanks to Jerome Fenal for the
catch.

Configuration
- - -------------

Removed the need for $MyTicketsLength and $MyRequestsLength in
RT::Config.

Made AllowedComponent (the components users are allowed to add to
their MyRT page) configurable in RT_Config.

Set the default value for $RedistributeAutoGeneratedMessages to
"privileged".

Cleaned up SiteConfig.pm.

Added the $WebDefaultStylesheet configuration option, which sets the
default stylesheet to use.  (Current options are 3.5-default and 3.4-
compat.)

Added the $RT::WikiImplicitLinks option, which controls whether
WikiText fields should automatically make ALLCAPS or InterCaps words
into links to searches for those words.  (Defaults to false.)

Added the configuration option $LogStackTraces, which generates stack
traces to a file or the screen.

RT-Ticket: 7121   Applied a patch to make the Web-based ACL tests
honor RT::WebPath.  Thanks to Todd Chapman.

RT-Ticket: 7122   Applied a patch to honor a changed $rtname variable
when running the test suite.  Thanks to Todd Chapman.

Switched the semantics of the $LinkTransactionsRun1Scrip and the
default value.  If you haven't set this value, you won't be affected.
Thanks to Todd Chapman.

Added the $StrictLinkACL configuration option.  When it is enabled (as
it is by default), the user must have the ModifyTicket right on both
tickets to link them together.  If it is disabled, the user can link
the tickets with ModifyTicket on either or both tickets.

Regression Testing
- - ------------------

Fixed 'make regression' so as to allow it to be run as a non-root
user.

Added minimum regression tests for frontpage customization.

Cleaned up and expanded the ACL test suite to be more robust.

Improved the diagnostics on custom field sanity tests.

Added plans to a bunch of tests.

Added additional tests for bugs related to having no requestor when
sorting by requestor.  Made the test text reflect the number of
tickets the test is looking for.

Cleaned the tests to print diagnostic messages only if
$ENV{TEST_VERBOSE} is true ('prove -v' sets this).

Changed diagnostic messages to print the URL we are testing.

Added some utility functions in 04send_email.t: first_txn, count_xns,
first_attach and count_attachs.

Used simple file_content function in 04send_email.t instead of `cat`.

Added a test suite for all corner cases of the new watcher-searching
code (22search_tix_by_watcher.t).

Removed debugging lines from 20-sort-by-requestor.t.

Fixed the sort-by-requestor tests to only compare non-nulls, since the
tests would otherwise fail on some database backends because they sort
nulls differently than Perl does.

RT-Ticket: 7121   Applied a patch to make the Web-based ACL tests
honor RT::WebPath.  Thanks to Todd Chapman.

RT-Ticket: 7122   Applied a patch to honor a changed $rtname variable
when running the test suite.  Thanks to Todd Chapman.

Added a tailing test -- paging, ORDER BY, JOIN, and DISTINCT collude
to produce incorrect results, unless the DISTINCT is done very
carefully.

Made tests reentrant in lib/RT/Tickets_Overlay_SQL.pm.

Added a plan to the scrip-ordering tests

Added the beginnings of CLI tests.

Added most of the 'frob this database field on the ticket' tests I
think the CLI is going to want.

Added tests for listing and showing tickets from the command line.

Added tests for modification of users, groups, and queues from the
CLI.

Added tests for a basic (not-yet-implemented) CLI mechanism to create
and modify custom fields

Applied a patch to make the RT 3.5 test-suite obey the configuration
directives for server and port, so you don't have to be testing on
localhost and port 80.  Thanks to Todd Chapman.

Gave the RT CLI tests a plan.

Tweaked the new CLI tests to handle servers and ports which are not
localhost and 80, respectively, a la Todd Chapman's patch.

RT-Ticket: 7425   Applied test fixes.  Thanks to Todd Chapman.

Updated the CLI test suite to check that commenting and replying
actually work now.

Added tests for merging tickets via the CLI.

Spec'd out tests for 'take'ing and 'steal'ing tickets via the CLI.

Added failing tests for several custom field searches.

Add a test for the CF.{cfname} search format.

Fixed the test count for the CLI tests.

Ordered attributes in 13-attribute-tests.t by Id, as some tests depend
on that.

Added tests for the new $StrictLinkACL configuration option, the re-
creation of the transaction on the creation of a duplicate link, and
all associated changes.

Scrips
- - ------

Fixed a misleading error in lib/RT/Scrip_Overlay.pm, which referred to
IsApplicable instead of Commit.

Performed a minor refactoring in RT::Action::CreateTickets.

Provided more flexible support for custom fields whose names contain
dashes and spaces in CreateTickets templates.

Changed RT::Action::CreateTickets to parse embedded newlines.  Also
changed it to anchor column alias matches at beginning and end, so
they don't pick up things like 'CustomField-Summary Status' as =~
/Summary/.

Added support for multiple Requestors, Ccs, AdminCcs, or links on one
line in RT::Action::CreateTickets.

Documented and standardized the UpdateType field in
RT::Action::CreateTickets.

Fix another possible infinite loop bug in RT::Action::CreateTickets.

Added the ForceOwner field in RT::Action::CreateTickets to force
ownership.

RT-Ticket: 7295   Changed the ordering on scrips to sort them by their
description, so you can force them to run in a particular order by
prepending numbers to their descriptions.  Updated the perldoc, the
UPGRADING document, and the EditScrips UI element to reflect this and
wrote tests for it.

Added a plan to the scrip-ordering tests

In RT::Action::CreateTickets: (1) collapsed ForceOwner and Owner in
RT::Action::CreateTickets, (2) fixed updating of (Admin)Ccs, (3) set
UpdateType to default to 'correspond', (4) defaulted the content-type
to 'text/plain', (5) added code to update custom fields during
processing, added better error handling when the ticket id doesn't
exist when trying to update it, and (6) removed the requirement that
'id' be the first column.  (In fact, specifying an id is no longer
required at all.  Blank or non-existant 'id' columns will cause the
code to assume that the ticket is new, and come up with an automatic
template id for the row.)

Changed RT::Action::CreateTicket to accept either the singular or the
plural form of Requestor, Cc, and AdminCc.

Modified Ticket/Elements/PreviewScrips to check and report to the logs
if a scrip couldn't fire.

Documentation
- - -------------

Documented some of the various CSS tricks used.

Added Calendar::Simple to the dependency list.  Thanks to Kevin
Falcone.

Added a note about the AHAH support.

Development Tools
- - -----------------

Added var, local, and share to svn:ignore.

Applied a patch from Jerome Fenal to make extract-message-catalog play
nice with svn checkouts.

Added SQL statement logging.

RT-Ticket: 7063   Added the ability to shell out to an outside program
to install dependencies (eg. Gentoo's 'g-cpan' utility).  A variant of
a patch from Ruslan Zakirov.

Changed the 'rt-test-dependencies' script: (1) to install modules
after all checks, (2) to test that CPAN.pm is configured and exit
otherwise, (3) to 'use eval' with CPAN.pm, and (4) to output some
suggestions if CPAN shell fails terribly.

RSS Feeds
- - ---------

Added a <link> tag in the Header element to enable RSS AutoDiscovery.

Changed the RSS file to use a more accurate Content-Type.

REST Interface
- - --------------

Made commenting and corresponding via the REST interface work.

Cleaned up the REST comment form and the dhandler a bit.

Fixed the error-out in the REST interface after commenting via the CLI
tool.

Standardized the REST Forms to use <%INIT> instead of <%perl>.

Made merging tickets via the REST interface and the CLI tool work.

Stopped using the deprecated RT::Queue::CustomFields method in the
REST interface.

Made the REST interface accept 'take|steal|untake' as Action
arguments.

Fixed the REST interface not to check the rights, since SetOwner will
do that for us.

Returned a more descriptive message when one user tries to steal a
ticket from another user.

Changed the REST interface to vsplit the Requestor, Cc and AdminCc
fields when creating a ticket, allowing multiple watchers to be
specified.

rt Command-Line Tool
- - --------------------

Added CLI support for custom fields from lwang at Cluster FS.

Laid out a skeleton for the CLI tests

Added a 'quit' command (also 'exit') to exit from the shell.  This
makes testing via Test::Expect a *lot* easier.

Added basic documentation for the shell

Added the beginnings of CLI tests.

Added most of the 'frob this database field on the ticket' tests I
think the CLI is going to want.

Added basic Term::ReadLine support to the CLI.

Added tests for listing and showing tickets from the command line.

Added tests for modification of users, groups, and queues from the
CLI.

Added tests for a basic (not-yet-implemented) CLI mechanism to create
and modify custom fields

Gave the RT CLI tests a plan.

Tweaked the new CLI tests to handle servers and ports which are not
localhost and 80, respectively, a la Todd Chapman's patch.

Fixed the RT command-line tool to not spew the entire help text for
the command you just typed if you screw something up, so you don't
have to scroll up a couple pages to see the actual error message.

Changed most of the todo_skip CLI tests to TODO tests, so we can see
when they start passing.

Made the CLI tool grab a form from the server to get default values
when creating new objects.

Made the command-line tool not spew the entire help text if you give
it an unrecognized command.

Made the command-line tool ignore a leading 'rt' in a command in shell
mode (eg. 'rt create' should do the same thing as just 'create');
added a test for this.

Discovered that, when attempting to comment via the command-line tool,
the RT instance thought it was being asked to find a ticket with an id
of 'comment'.  Flipped the order of the terms in the URL we're
requesting so that they fit the canonical order.

Fixed the default server location of the command-line tool to point to
RT's default location.

Made the command-line tool default to shell mode if no arguments are
passed to it.

Copied the old commenting code over to the place where the new
codepath is looking for it.

Updated the CLI test suite to check that commenting and replying
actually work now.

Applied a patch to make the CLI tool only invoke Term::ReadLine when
we're actually going to be using it.  Thanks to David Schweikert.

Made merging tickets via the REST interface and the CLI tool work.

Added tests for merging tickets via the CLI.

Spec'd out tests for 'take'ing and 'steal'ing tickets via the CLI.

Fixed the test count for the CLI tests.

Added custom summary "ticket lists" using the command-line tool's
lists (combining the -f and -s options).

Added take/untake/steal commands to the CLI.


- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (Darwin)

iD8DBQFEkUbhEi9d9xCOQEYRApieAKDEHu55PYb/BLB6yEEIAG9Gj47UzACdHouF
LCid+m0eqjjAqG4Zruy2LRg=
=Jyq0
- -----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (Darwin)

iD8DBQFEkUk4Ei9d9xCOQEYRAnClAJ0ZFUhMx5/yKanW1f0fFMUaHikN+wCfdwlA
QE/lqUZt5+ET3bnu2aL6sdA=
=J7l6
-----END PGP SIGNATURE-----


More information about the RT-Announce mailing list