[Rt-commit] r4134 - in rt/branches/3.7-EXPERIMENTAL: . etc html html/Admin/Groups html/Admin/Users html/Elements html/Elements/RT__Ticket html/NoAuth html/NoAuth/css/3.4-compat html/NoAuth/css/3.5-default html/NoAuth/images html/NoAuth/js html/Prefs html/Search html/SelfService html/SelfService/Elements html/Ticket html/Ticket/Elements html/User/Elements html/Widgets lib lib/RT lib/RT/Action lib/RT/I18N lib/RT/Interface lib/t/regression sbin

ruz at bestpractical.com ruz at bestpractical.com
Tue Nov 22 01:15:31 EST 2005


Author: ruz
Date: Tue Nov 22 00:41:39 2005
New Revision: 4134

Added:
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/login.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/misc.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/ticket.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/logo.css
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/22search_tix_by_watcher.t
Removed:
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/class.js
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/list.js
Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/configure.ac
   rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in
   rt/branches/3.7-EXPERIMENTAL/html/Admin/Groups/History.html
   rt/branches/3.7-EXPERIMENTAL/html/Admin/Users/History.html
   rt/branches/3.7-EXPERIMENTAL/html/Elements/Error
   rt/branches/3.7-EXPERIMENTAL/html/Elements/Header
   rt/branches/3.7-EXPERIMENTAL/html/Elements/Login
   rt/branches/3.7-EXPERIMENTAL/html/Elements/Logo
   rt/branches/3.7-EXPERIMENTAL/html/Elements/Menu
   rt/branches/3.7-EXPERIMENTAL/html/Elements/PageLayout
   rt/branches/3.7-EXPERIMENTAL/html/Elements/QueueSummary
   rt/branches/3.7-EXPERIMENTAL/html/Elements/RT__Ticket/ColumnMap
   rt/branches/3.7-EXPERIMENTAL/html/Elements/TicketList
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/body.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/header.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/main.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/nav.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/quickbar.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/titlebox.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/transactions.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/forms.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/header.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/main.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/nav.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/quickbar.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/titlebox.css
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/images/bplogo.gif
   rt/branches/3.7-EXPERIMENTAL/html/NoAuth/js/util.js
   rt/branches/3.7-EXPERIMENTAL/html/Prefs/Quicksearch.html
   rt/branches/3.7-EXPERIMENTAL/html/Search/Bulk.html
   rt/branches/3.7-EXPERIMENTAL/html/SelfService/Display.html
   rt/branches/3.7-EXPERIMENTAL/html/SelfService/Elements/Tabs
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Display.html
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/EditBasics
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowHistory
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/ModifyAll.html
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Reminders.html
   rt/branches/3.7-EXPERIMENTAL/html/Ticket/Update.html
   rt/branches/3.7-EXPERIMENTAL/html/User/Elements/Tabs
   rt/branches/3.7-EXPERIMENTAL/html/Widgets/TitleBoxEnd
   rt/branches/3.7-EXPERIMENTAL/html/autohandler
   rt/branches/3.7-EXPERIMENTAL/lib/RT.pm.in
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Action/SendEmail.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Attachment_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Date.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/cs.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/da.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/de.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/en.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/es.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fi.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fr.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/he.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/hu.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/id.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/it.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ja.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/nl.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/no.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pl.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pt_br.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ru.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_cn.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_tw.po
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Ticket_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay_SQL.pm
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/03web_compiliation_errors.t
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/04send_email.t
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/12-search.t
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/13-attribute-tests.t
   rt/branches/3.7-EXPERIMENTAL/lib/t/regression/20-sort-by-requestor.t
   rt/branches/3.7-EXPERIMENTAL/sbin/rt-test-dependencies.in
Log:
 r1099 at cubic-pc (orig r3931):  jesse | 2005-10-05 23:25:32 +0400
  r17089 at hualien:  jesse | 2005-10-05 11:11:26 -0400
   r17072 at hualien:  jesse | 2005-10-05 10:39:48 -0400
    r17059 at hualien:  jesse | 2005-10-05 10:08:39 -0400
     r17052 at hualien:  jesse | 2005-10-05 09:37:42 -0400
      r15958 at hualien (orig r3877):  alexmv | 2005-09-22 15:09:22 -0400
       r6458 at zoq-fot-pik:  chmrr | 2005-09-22 15:08:37 -0400
        * Add where the faulty caller was in deprecated warnings
      
      r16168 at hualien (orig r3892):  robert | 2005-09-28 12:16:03 -0400
       r3945 at bear:  rspier | 2005-09-28 09:15:08 -0700
       Performance Improvement when Sending Email using sendmailpipe -
       
       MIME::Entity would bog down in certain cases because of it's use of IO::Scalar during stringification.  MIME::Entity will be switching to IO::ScalarArray, which will help... but RT was causing it to store into a temporary string anyway, which was silly.
       
       This change has MIME::Entity write directly to the pipe, which is a lot more efficient.  Seems to cut out ~33% of user time.  (Because we don't need to have a temporary IO::Scalar thingy around.)  Also will reduce peak memory usage.
       
      
      r16169 at hualien (orig r3893):  jesse | 2005-09-28 13:27:29 -0400
      Switch from ->CustomFields to ->TicketCustomFields to stop using a deprecated API.
        Thanks to T.J. Maciak
      
      r17038 at hualien (orig r3894):  alexmv | 2005-09-30 15:19:46 -0400
       r6554 at zoq-fot-pik:  chmrr | 2005-09-30 15:16:47 -0400
        * Remove unused and deprecated code path (bugs 6605, 7008)
      
      r17039 at hualien (orig r3895):  alexmv | 2005-09-30 15:19:57 -0400
       r6555 at zoq-fot-pik:  chmrr | 2005-09-30 15:18:22 -0400
        * Link to the *other* end of the link, not the one that is us
      
      r17040 at hualien (orig r3896):  alexmv | 2005-09-30 15:56:31 -0400
       r6558 at zoq-fot-pik:  chmrr | 2005-09-30 15:56:06 -0400
       RT-Ticket: 7029
       RT-Status: resolved
       RT-Update: correspond
       
        * Applied missing limit for AdminCcs, from Todd Chapman
       
      
      r17044 at hualien (orig r3900):  alexmv | 2005-10-03 13:32:45 -0400
       r6566 at zoq-fot-pik:  chmrr | 2005-10-03 13:28:24 -0400
        * Updated spanish translation, thanks to Carlos Velasco
      
      r17045 at hualien (orig r3901):  alexmv | 2005-10-03 14:15:35 -0400
       r6568 at zoq-fot-pik:  chmrr | 2005-10-03 14:14:49 -0400
        * Header fixes in PO files to include correct RT version
      
     
    
   
  
 
 r1101 at cubic-pc (orig r3931):  svm | 2005-10-06 04:25:58 +0400
 SVM: initializing mirror for /mirrors/branches/3.5-TESTING
 r1102 at cubic-pc (orig r3932):  jesse | 2005-10-05 23:45:05 +0400
 * Alex points out that the PO merges are wrong
 
 
 r1105 at cubic-pc (orig r3934):  ruz | 2005-10-06 04:41:56 +0400
 * tests cleanup, print diag messages only if we $ENV{TEST_VERBOSE} is true
   prove -v set this
 * print diag message with URL we test
 r1115 at cubic-pc (orig r3935):  ruz | 2005-10-06 05:39:58 +0400
 * new config option LogStackTraces
 r1116 at cubic-pc (orig r3936):  ruz | 2005-10-06 05:52:51 +0400
 * added some util functions in .t file:
   first_txn, count_xns, first_attach and count_attachs
   this functions should be moved later into standalone
   test helper file
 * use simple file_content function instead of `cat`
 
 r1119 at cubic-pc (orig r3942):  ruz | 2005-10-07 20:40:57 +0400
 * get rid of uninit warnings
 r1126 at cubic-pc (orig r3943):  ruz | 2005-10-10 21:15:15 +0400
 Changes
 * fix for ordering by watcher's fields(workaround)
 * fix for search by owner's fields, now owner is WATCHERFIELD instead of ENUM
 * added backward compatible variant for Owner, next searches should work
 ** Owner = '<id>'
 ** Owner != '<id>'
 ** Owner = '<name>'
 ** Owner != '<name>'
 ** for other operators or if subfield(subkey) is specified search works
    as for other watchers
 * Fix for searches like "Cc.Name <> 'SomeBody'", was skipping tickets
   with empty Cc list.
 * get rid of some unint warnings
 * test suite for all corner cases
 * one TODO test block
 
 r1147 at cubic-pc (orig r3949):  trs | 2005-10-12 04:38:49 +0400
  r6570 at wintermute:  tom | 2005-10-10 21:07:35 -0400
  Removed the old right-style menu CSS and made the left-style the default
  so it's easier to fiddle with.
 
 r1148 at cubic-pc (orig r3950):  trs | 2005-10-12 04:38:54 +0400
  r6571 at wintermute:  tom | 2005-10-11 20:28:25 -0400
  Reorganized the whole page header to squash some bugs and make it function
  better.  Lots of CSS cleanups and the stacked menus should generally behave
  now.  There is a very minor, cosmetic spacing issue in IE, but I'll address
  that later.  I also moved the logo div out of the quickbar and on its own.
 
 r1149 at cubic-pc (orig r3954):  trs | 2005-10-13 03:43:40 +0400
  r6574 at wintermute:  tom | 2005-10-12 13:45:46 -0400
  Fix stacked menu spacing in IE
 
 r1150 at cubic-pc (orig r3973):  jesse | 2005-10-15 07:57:52 +0400
  r17383 at hualien:  jesse | 2005-10-14 16:12:53 -0400
  * perltidy
  r17385 at hualien:  jesse | 2005-10-14 16:33:19 -0400
   r17373 at hualien:  jesse | 2005-10-14 15:34:42 -0400
    r17359 at hualien:  jesse | 2005-10-14 15:21:10 -0400
    * Perltidy
   
  
  r17386 at hualien:  jesse | 2005-10-14 16:33:41 -0400
   r17374 at hualien:  jesse | 2005-10-14 15:34:43 -0400
    r17361 at hualien:  jesse | 2005-10-14 15:22:39 -0400
     r17358 at hualien:  jesse | 2005-10-14 15:06:26 -0400
      r17219 at hualien (orig r3938):  robert | 2005-10-07 00:20:15 -0400
       r3995 at bear:  rspier | 2005-10-06 21:19:24 -0700
        [fsck.com #7067] - If we can't find a customfield that the user is allowed to see on a ticket, don't return any values, (when specifying a custom field)
      
      r17275 at hualien (orig r3944):  ruz | 2005-10-10 15:27:36 -0400
      backport of the 3.5-TESTING at 3943
      Changes
      * fix for search by owner's fields, now owner is WATCHERFIELD instead of ENUM
      * added backward compatible variant for Owner, next searches should work
      ** Owner = '<id>'
      ** Owner != '<id>'
      ** Owner = '<name>'
      ** Owner != '<name>'
      ** for other operators or if subfield(subkey) is specified search works
         as for other watchers
      * Fix for searches like "Cc.Name <> 'SomeBody'", was skipping tickets
        with empty Cc list.
      * get rid of some unint warnings
      * test suite for all corner cases
      
      r17276 at hualien (orig r3945):  ruz | 2005-10-10 15:47:29 -0400
      backport of the 3.5-TESTING at 3543
      Changes:
      * fix attachments ordering
      
      r17313 at hualien (orig r3948):  ruz | 2005-10-10 20:01:50 -0400
      * get rid of "not a number" warning
      r17339 at hualien (orig r3957):  ruz | 2005-10-13 08:37:47 -0400
      * code comments
      r17340 at hualien (orig r3958):  ruz | 2005-10-13 08:40:24 -0400
      * new callback in html/User/Elements/Tabs
     
     r17360 at hualien:  jesse | 2005-10-14 15:21:46 -0400
     * Perltidy
    
   
  
  r17387 at hualien:  jesse | 2005-10-14 16:34:33 -0400
   r17375 at hualien:  jesse | 2005-10-14 15:34:45 -0400
    r17362 at hualien:  jesse | 2005-10-14 15:56:53 -0400
    * Merge fixups
   
  
  r17388 at hualien:  jesse | 2005-10-14 16:34:35 -0400
   r17376 at hualien:  jesse | 2005-10-14 15:34:47 -0400
    r17363 at hualien:  jesse | 2005-10-14 15:57:06 -0400
    * Todo test no longer failing
   
  
  r17389 at hualien:  jesse | 2005-10-14 16:34:36 -0400
   r17377 at hualien:  jesse | 2005-10-14 15:34:48 -0400
    r17371 at hualien:  jesse | 2005-10-14 17:13:07 -0400
    Pull up from 3.4
   
  
  r17390 at hualien:  jesse | 2005-10-14 23:45:35 -0400
  * Tickets_Overlay.pm merging; untodoed passing tests
 
 r1156 at cubic-pc (orig r3977):  trs | 2005-10-19 02:22:43 +0400
  r6654 at wintermute:  tom | 2005-10-18 08:44:56 -0400
  Fixed up the 3.4-compat styles to account for HTML and CSS changes
 
 r1157 at cubic-pc (orig r3978):  trs | 2005-10-19 02:22:47 +0400
  r6655 at wintermute:  tom | 2005-10-18 08:53:18 -0400
  Bolded ticket values to match 3.4
 
 r1251 at cubic-pc (orig r4067):  jesse | 2005-11-14 20:54:01 +0300
  r18883 at truegrounds:  jesse | 2005-11-14 12:46:30 -0500
  RT-Ticket: 7082
  RT-Status: resolved
  RT-Update: correspond
  
  * Patch to show queue descriptions in quicksearch preferences from
    Joby Walker
  
 
 r1252 at cubic-pc (orig r4068):  jesse | 2005-11-14 20:54:13 +0300
  r18884 at truegrounds:  jesse | 2005-11-14 12:51:29 -0500
  RT-Ticket: 7056
  RT-Status: resolved
  RT-Update: correspond
  
  * Patch from Peter Popovics to improve calendar popup browser compatibility
 
 r1253 at cubic-pc (orig r4070):  jesse | 2005-11-14 21:04:05 +0300
  r18890 at truegrounds:  jesse | 2005-11-14 13:02:38 -0500
  RT-Ticket: 7053
  RT-Status: resolved
  RT-Update: correspond
  
  * IE titlebox style cleanup from Peter Popovics
 
 r1285 at cubic-pc (orig r4082):  alexmv | 2005-11-14 23:15:00 +0300
  r7157 at zoq-fot-pik:  chmrr | 2005-11-14 15:14:13 -0500
  RT-Ticket: 6762
  RT-Status: resolved
  RT-Update: correspond
   * "Create" in SelfService goes straight to the only queue if they
     only have one; thanks to Kenneth Marshall <ktm at it.is.rice.edu>
 
 r1310 at cubic-pc (orig r4088):  alexmv | 2005-11-15 00:57:12 +0300
  r7169 at zoq-fot-pik:  chmrr | 2005-11-14 16:55:38 -0500
  RT-Ticket: 7106
  RT-Status: resolved
  RT-Update: correspond
   * Updated french translation from Jerome Fenal <jfenal at gmail.com>
 
 r1311 at cubic-pc (orig r4091):  trs | 2005-11-15 01:24:24 +0300
  r6952 at wintermute:  tom | 2005-11-14 17:23:00 -0500
  Deleting old remanents from a merge bug
 
 r1312 at cubic-pc (orig r4093):  alexmv | 2005-11-15 01:58:13 +0300
  r7177 at zoq-fot-pik:  chmrr | 2005-11-14 17:46:20 -0500
  RT-Ticket: 7063
  RT-Status: resolved
  RT-Update: correspond
   * Ability to shell out to outside program to install deps; variant of
     patch from Ruz.
 
 r1313 at cubic-pc (orig r4094):  trs | 2005-11-15 02:30:41 +0300
  r6954 at wintermute:  tom | 2005-11-14 18:16:02 -0500
  * Cleaned up logic in ShowHistory
  * Fixed params in the Group/User histories
 
 r1314 at cubic-pc (orig r4095):  trs | 2005-11-15 02:30:46 +0300
  r6955 at wintermute:  tom | 2005-11-14 18:29:51 -0500
  Note about (ab)use
 
 r1324 at cubic-pc (orig r4119):  trs | 2005-11-19 03:39:43 +0300
  r7023 at wintermute:  tom | 2005-11-18 19:35:25 -0500
  Better menu style, should elimination menu wrapping
 
 r1333 at cubic-pc (orig r4125):  trs | 2005-11-21 23:58:42 +0300
  r6486 at wintermute:  tom | 2005-11-21 15:35:10 -0500
  Utility function
 
 r1334 at cubic-pc (orig r4126):  trs | 2005-11-22 00:11:32 +0300
  r6501 at wintermute:  tom | 2005-11-21 16:10:38 -0500
  Better compat. at the suggestion of Jesse
 
 r1335 at cubic-pc (orig r4127):  trs | 2005-11-22 00:53:31 +0300
  r6505 at wintermute:  tom | 2005-11-21 16:51:50 -0500
  Overzealous s/document\.getElementById/$/g
 
 r1336 at cubic-pc (orig r4128):  alexmv | 2005-11-22 00:59:46 +0300
  r7297 at zoq-fot-pik:  chmrr | 2005-11-21 16:59:01 -0500
   * Removed duplicated line
 
 r1337 at cubic-pc (orig r4129):  trs | 2005-11-22 03:59:58 +0300
  r6509 at wintermute:  tom | 2005-11-21 19:58:59 -0500
  * Couple of merge/typo bug fixes
  * Improved 3.4-compat styles, still need IE testing though
 
 r1338 at cubic-pc (orig r4130):  ruz | 2005-11-22 06:52:05 +0300
  r1331 at cubic-pc (orig r4123):  ruz | 2005-11-21 22:30:40 +0300
   r1328 at cubic-pc:  cubic | 2005-11-21 17:29:03 +0300
   * fix time units handling, '1/8' didn't work
   * we don't filter args with grep to filter them again in loop
   * tidy and code paths cleanup
  
 
 r1339 at cubic-pc (orig r4131):  ruz | 2005-11-22 06:54:02 +0300
  r1332 at cubic-pc (orig r4124):  ruz | 2005-11-21 22:30:53 +0300
   r1329 at cubic-pc:  cubic | 2005-11-21 17:38:22 +0300
   * Name sufix -TimeUnits is optional in Elements/SelectTimeUnits
   * get rid of sufix in the callers
  
 


Modified: rt/branches/3.7-EXPERIMENTAL/configure.ac
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in	(original)
+++ rt/branches/3.7-EXPERIMENTAL/etc/RT_Config.pm.in	Tue Nov 22 00:41:39 2005
@@ -274,6 +274,11 @@
 Set($LogDir, '@RT_LOG_PATH@');
 Set($LogToFileNamed , "rt.log");    #log to rt.log
 
+# If true generates stack traces to file log or screen
+# never generates traces to syslog
+
+Set($LogStackTraces , 0);
+
 # On Solaris or UnixWare, set to ( socket => 'inet' ).  Options here
 # override any other options RT passes to Log::Dispatch::Syslog.
 # Other interesting flags include facility and logopt.  (See the

Modified: rt/branches/3.7-EXPERIMENTAL/html/Admin/Groups/History.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Admin/Groups/History.html	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Admin/Groups/History.html	Tue Nov 22 00:41:39 2005
@@ -52,7 +52,7 @@
 
 <& /Ticket/Elements/ShowHistory,
     Ticket => $GroupObj,
-    ShowHeaderModes => 0,
+    ShowDisplayModes => 0,
 &>
 
 <%INIT>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Admin/Users/History.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Admin/Users/History.html	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Admin/Users/History.html	Tue Nov 22 00:41:39 2005
@@ -52,7 +52,7 @@
 
 <& /Ticket/Elements/ShowHistory,
     Ticket => $UserObj,
-    ShowHeaderModes => 0,
+    ShowDisplayModes => 0,
 &>
 
 <%INIT>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/Error
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/Header
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/Header	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/Header	Tue Nov 22 00:41:39 2005
@@ -75,6 +75,8 @@
   <body<% $id && qq[ id="comp-$id"] |n %>>
 
 % if ($ShowBar) {
+<& /Elements/Logo &>
+
 <div id="quickbar">
   <div id="quick-personal">
     <span class="hide"><a href="#skipnav"><&|/l&>Skip Menu</&></a> | </span>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/Login
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/Login	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/Login	Tue Nov 22 00:41:39 2005
@@ -67,12 +67,11 @@
 <& /Elements/Callback, %ARGS, _CallbackName => 'Header' &>
 <& /Elements/Header, Title => loc('Login'), Focus => 'user' &>
 
-<& /Elements/Logo &>
 
 %# End of div#quickbar from /Elements/Header
 </div>
 
-<div id="body">
+<div id="body" class="login-body">
 
 % if ($Error) {
 <&| "/Widgets/TitleBox", title => loc('Error'), hideable => 0  &>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/Logo
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/Logo	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/Logo	Tue Nov 22 00:41:39 2005
@@ -44,7 +44,7 @@
 %# 
 %# END BPS TAGGED BLOCK }}}
   <div id="logo">
-    <a href="http://bestpractical.com"><img src="<%$RT::WebImagesURL%>/bplogo.gif" alt="<%loc("Best Practical Solutions, LLC corporate logo")%>" width="216" height="50"></a>
+    <a href="http://bestpractical.com"><img src="<%$RT::WebImagesURL%>/bplogo.gif" alt="<%loc("Best Practical Solutions, LLC corporate logo")%>" width="177" height="33"></a>
 % if ($show_name) {
     <div class="rtname"><% loc("RT for [_1]", $RT::rtname) %></div>
 % }

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/Menu
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/Menu	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/Menu	Tue Nov 22 00:41:39 2005
@@ -44,7 +44,7 @@
 %# 
 %# END BPS TAGGED BLOCK }}}
 <ul<% !$level ? ' id="system-menu"' : ''|n %><% $menu_class ? qq[ class="$menu_class"] : ''|n %>>
-<div>
+<div<% $menu_class ? qq[ class="$menu_class"] : ''|n %>><div class="wrapper">
 % my $sep         = 0;
 % my $postsep     = 0;
 % my $accesskey   = 1;
@@ -101,7 +101,7 @@
 %
 %     $postsep = $sep;
 % }
-</div>
+</div></div>
 </ul>
 
 <%INIT>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/PageLayout
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/PageLayout	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/PageLayout	Tue Nov 22 00:41:39 2005
@@ -51,8 +51,6 @@
 % }
   </div>
 
-<& /Elements/Logo &>
-
 %# End of div#quickbar from /Elements/Header
 </div>
 
@@ -60,11 +58,7 @@
 <& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &>
 </div>
 
-<div id="header"
-% if ($RT::WebDefaultStylesheet eq '3.5-default') {
-     style="padding-top: <% 1.5 * $menu_depth %>em; _padding-top: <% 0.55 * $menu_depth %>em;"
-% }
-  >
+<div id="header">
   <h1><%$title%></h1>
 
 % my $sep       = 0;

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/QueueSummary
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Elements/QueueSummary	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Elements/QueueSummary	Tue Nov 22 00:41:39 2005
@@ -45,9 +45,9 @@
 %# END BPS TAGGED BLOCK }}}
 <table border="0" cellspacing="0" cellpadding="1" width="100%">
 <tr>
-       <th class="collection-as-table" align="left"><&|/l&>Queue</&></th>
+       <th class="collection-as-table"><&|/l&>Queue</&></th>
 % for my $condition (@$conditions) {
-       <th class="collection-as-table" align="right"><% $condition->{name} %></th>
+       <th class="collection-as-table"><% $condition->{name} %></th>
 % }
 </tr>
 % my $i;

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/RT__Ticket/ColumnMap
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Elements/TicketList
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/body.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/body.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/body.css	Tue Nov 22 00:41:39 2005
@@ -1,6 +1,7 @@
 #body {
-    margin-top: 0.5em;
-    margin-right: 0.5em;
+    margin: 0.5em 0.5em 0 0.5em;
+    float: left;
+    width: 80%;
 }
 
 #body h1 { font-size: 1.5em; }

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/header.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/header.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/header.css	Tue Nov 22 00:41:39 2005
@@ -51,6 +51,8 @@
     background: #4282b5;
     margin-top: 0;
     padding-bottom: 0.2em;
+    float: left;
+    width: 82%;
 }
 
 #header h1 {

Added: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/login.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/login.css	Tue Nov 22 00:41:39 2005
@@ -0,0 +1,7 @@
+#body.login-body {
+    width: 98%;
+}
+
+#login-box {
+    width: 30em;
+}

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/main.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/main.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/main.css	Tue Nov 22 00:41:39 2005
@@ -45,14 +45,15 @@
 %# END BPS TAGGED BLOCK }}}
 
 %# Import the 3.5 styles we want to build off of...
+ at import "../3.5-default/logo.css";
 @import "../3.5-default/misc.css";
 @import "../3.5-default/transactions.css";
 @import "../3.5-default/approvals.css";
 @import "../3.5-default/login.css";
- at import "../3.5-default/approvals.css";
+ at import "../3.5-default/quickbar.css";
+ at import "../3.5-default/ticket.css";
 
 %# ...and then import the 3.4 compat styles afterwards so they can cascade
- at import "quickbar.css";
 @import "nav.css";
 @import "footer.css";
 @import "body.css";
@@ -60,3 +61,8 @@
 @import "header.css";
 @import "forms.css";
 @import "transactions.css";
+ at import "ticket.css";
+ at import "login.css";
+ at import "quickbar.css";
+ at import "misc.css";
+

Added: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/misc.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/misc.css	Tue Nov 22 00:41:39 2005
@@ -0,0 +1,2 @@
+.oddline { background: white; }
+.evenline { background: #cecfef; }

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/nav.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/nav.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/nav.css	Tue Nov 22 00:41:39 2005
@@ -1,5 +1,5 @@
 #nav {
-    clear: both;
+    clear: left;
     float: left;
     width: 18%;
     font-size: 1.4em;
@@ -8,8 +8,6 @@
     background: #4282b5 url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right;
 }
 
-#body { margin-left: 20%; }
-
 #nav #system-menu {
     padding: 0 0.2em 0.2em 0.2em;
     margin-top: 0;

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/quickbar.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/quickbar.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/quickbar.css	Tue Nov 22 00:41:39 2005
@@ -1,26 +1,5 @@
 #quickbar {
-    position: relative;
-    padding-bottom: -2em;
-    border-bottom: 2.5em solid #000084;
-}
-
-#logo {
-    position: relative;
-    width: 216px;
-    left: 10px;
-    top: 0;
-}
-
-#logo img { border: none; }
-
-#logo div.rtname {
-    position: absolute;
-    left: 1em;
-    bottom: -1.5em;
-    font-weight: bold;
-    font-size: 1.3em;
-    background: #000084;
-    color: white;
+    border: 1px solid transparent;
 }
 
 #quickbar #quick-personal {
@@ -50,8 +29,7 @@
 #quickbar #topactions {
     color: white;
     font-size: 0.9em;
-    position: absolute;
+    position: relative;
     right: 1em;
-    bottom: -2.3em;
-    background: #000084;
+    float: right;
 }

Added: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/ticket.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/ticket.css	Tue Nov 22 00:41:39 2005
@@ -0,0 +1,3 @@
+.value {
+    font-weight: bold;
+}

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/titlebox.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/titlebox.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/titlebox.css	Tue Nov 22 00:41:39 2005
@@ -1,4 +1,12 @@
-.titlebox .title {
+.titlebox {
+    margin: 0.5em 0;
+}
+
+.titlebox .titlebox-content {
+    padding: 0.05em;
+}
+
+.titlebox .titlebox-title {
     background: #069;
     padding: 0.2em 0.5em;
     color: white;
@@ -8,16 +16,41 @@
     position: relative;
 }
 
-.titlebox .title .right {
+.titlebox .titlebox-title .right {
     position: absolute;
     right: 1.5em;
     font-size: 0.9em;
 }
 
-#body .titlebox .title :link, #body .titlebox .title :visited {
+#body .titlebox .titlebox-title :link, #body .titlebox .titlebox-title :visited {
     color: white;
 }
 
-#body .titlebox .title .widget :link, #body .titlebox .title .widget :visited {
+#body .titlebox .titlebox-title .widget :link, #body .titlebox .titlebox-title .widget :visited {
     color: black;
 }
+
+.titlebox .titlebox-content hr.clear {
+    visibility: hidden;
+}
+
+%# TRS: I wish there was a more elegant way to do this... I essentially need to
+%# select all elements X that do NOT have element Y as a descendant... which I can
+%# fake with the child selector of CSS2, but IE is stupid and does not support that.
+
+% for (qw(index
+%         Search-Build
+%         User-Prefs
+%         Approvals
+%         Admin-Users-Modify
+%         SelfService
+%         SelfService-Closed
+%         Ticket-ModifyAll
+%                           ))
+% {
+#comp-<%$_%> .titlebox .titlebox-content,
+% }
+.titlebox .titlebox .titlebox-content
+{
+    background: #cecfce;
+}

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/transactions.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/transactions.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.4-compat/transactions.css	Tue Nov 22 00:41:39 2005
@@ -59,23 +59,23 @@
 
 .ticket-transaction.basics { border-color: #9c3031; }
 .ticket-transaction.basics .type { background: #9c3031; }
-.ticket-summary .ticket-info-basics .content { border-left: none; }
-.ticket-summary .ticket-info-basics .title { background: #9c3031; }
+.ticket-summary .ticket-info-basics .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-basics .titlebox-title { background: #9c3031; }
 
 .ticket-transaction.people { border-color: #31309c; }
 .ticket-transaction.people .type { background: #31309c; }
-.ticket-summary .ticket-info-people .content { border-left: none; }
-.ticket-summary .ticket-info-people .title { background: #31309c; }
+.ticket-summary .ticket-info-people .titlebox-content { border-left: none; }
+.ticket-summary .ticket-info-people .titlebox-title { background: #31309c; }
 
 .ticket-transaction.links { border-color: #316531; }
 .ticket-transaction.links .type { background: #316531; }
-.ticket-summary .ticket-info-links .content  { border-left: none; }
-.ticket-summary .ticket-info-links .title  { background: #316531; }
+.ticket-summary .ticket-info-links .titlebox-content  { border-left: none; }
+.ticket-summary .ticket-info-links .titlebox-title  { background: #316531; }
 
 .ticket-transaction.dates { border-color: #633063; }
 .ticket-transaction.dates .type { background: #633063; }
-.ticket-summary .ticket-info-dates .content  { border-left: none; }
-.ticket-summary .ticket-info-dates .title  { background: #633063; }
+.ticket-summary .ticket-info-dates .titlebox-content  { border-left: none; }
+.ticket-summary .ticket-info-dates .titlebox-title  { background: #633063; }
 
 .ticket-transaction.message { border-color: #069; }
 .ticket-transaction.message .type { background: #069; }

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/forms.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/forms.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/forms.css	Tue Nov 22 00:41:39 2005
@@ -133,23 +133,3 @@
     z-index: 200;
 }
 
-#quickbar #topactions form {
-    display: inline;
-    margin-left: 1em;
-}
-
-#quickbar #topactions form .button {
-    padding: 0 2px 0 2px;
-    font-size: 1em;
-    margin: 0;
-}
-
-#quickbar #topactions form .field {
-    border: 1px solid #069;
-    padding: 1px;
-    font-size: 0.9em;
-}
-
-#quickbar #topactions form input.field {
-    padding: 3px;
-}

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/header.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/header.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/header.css	Tue Nov 22 00:41:39 2005
@@ -1,52 +1,7 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%# 
-%# COPYRIGHT:
-%#  
-%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
-%#                                          <jesse at bestpractical.com>
-%# 
-%# (Except where explicitly superseded by other copyright notices)
-%# 
-%# 
-%# LICENSE:
-%# 
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%# 
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%# General Public License for more details.
-%# 
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%# 
-%# 
-%# CONTRIBUTION SUBMISSION POLICY:
-%# 
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%# 
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%# 
-%# END BPS TAGGED BLOCK }}}
-
 #header {
     clear: both;
     margin: 0 0.75em 0 0.75em;
+    padding-top: 1em;
 }
 
 #header h1 {
@@ -58,7 +13,7 @@
     font-size: 2em;
     font-weight: bold;
     left: 1.3em;
-    top: 0.21em;
+    top: 0.15em;
     z-index: 3;
 }
 
@@ -82,7 +37,7 @@
 %# 
 %# The expression() function takes Javascript, and basically what it's doing here
 %# is checking to see if the width of the menu would be greater than 65% of the body
-%# width.  If it is, great, leave it alone to automatically resize.  If it's not, set
+%# width.  If it is, great, leave it alone to automatically resize.  If it is not, set
 %# it to 65% of the body width.  This amounts to emulating the min-width rule that
 %# compliant browsers understand above.
 * html #header ul#page-menu {

Added: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/logo.css
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/logo.css	Tue Nov 22 00:41:39 2005
@@ -0,0 +1,13 @@
+#logo {
+    float: left;
+    clear: left;
+
+    margin: 0.5em 0 0.5em 10px;
+}
+
+#logo img { border: none; }
+#logo div.rtname {
+    text-align: center;
+    font-weight: bold;
+}
+

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/main.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/main.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/main.css	Tue Nov 22 00:41:39 2005
@@ -46,6 +46,7 @@
 
 @import "misc.css";
 @import "login.css";
+ at import "logo.css";
 @import "quickbar.css";
 @import "body.css";
 @import "approvals.css";
@@ -54,7 +55,6 @@
 @import "ticket.css";
 @import "transactions.css";
 @import "nav.css";
- at import "nav-left.css";
 @import "header.css";
 @import "footer.css";
 

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/nav.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/nav.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/nav.css	Tue Nov 22 00:41:39 2005
@@ -1,82 +1,69 @@
-%# BEGIN BPS TAGGED BLOCK {{{
-%# 
-%# COPYRIGHT:
-%#  
-%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
-%#                                          <jesse at bestpractical.com>
-%# 
-%# (Except where explicitly superseded by other copyright notices)
-%# 
-%# 
-%# LICENSE:
-%# 
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%# 
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-%# General Public License for more details.
-%# 
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-%# 
-%# 
-%# CONTRIBUTION SUBMISSION POLICY:
-%# 
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%# 
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%# 
-%# END BPS TAGGED BLOCK }}}
-
 #nav {
-    margin-top: 0.5em;
+    clear: both;
+    font-size: 1.1em;
 }
 
 #nav #system-menu {
-    font-size: 1.1em;
-    min-width: 47em;
+    min-width: 85%;
+}
+
+%# This is an interesting bit of CSS.  expression() is an IE-only extension to
+%# it's CSS implementation.  Just in case other browsers might choke on it,
+%# the rule is enclosed in a selector only IE will (wrongly) match to an element.
+%# 
+%# The expression() function takes Javascript, and basically what it's doing here
+%# is checking to see if the width of the menu would be greater than 85% of the body
+%# width.  If it is, great, leave it alone to automatically resize.  If it is not, set
+%# it to 85% of the body width.  This amounts to emulating the min-width rule that
+%# compliant browsers understand above.
+* html #nav #system-menu {
+    width: expression(document.body.clientWidth*0.85 < document.getElementById('page-menu').clientWidth ? "auto" : "85%");
+    overflow: visible;
 }
 
 #nav ul {
-    font-weight: bold;
-    font-size: 1em;
+    float: left;
+    clear: left;
+    
     color: #eee;
-    list-style: none;
+    font-weight: bold;
+    
     margin: 0;
-    padding: 0.2em 2em 0.4em 0;
-    float: right;
-    position: relative;
+    padding: 0;
+    
+    list-style: none;
 }
 
 #nav li ul {
-    position: absolute;
-    right: 0;
-    top: 2.21em;
-    font-size: 1em;
+    margin-top: 0.75em;
+}
+
+/*
+%# We need the extra padding above for browsers where we display the arrows
+%# but those don't work in IE so we don't want as much spacing
+%# 
+%# IE wrongly matches the selector below even though there isn't an element
+%# above <html> in the doc tree
+*/
+* html #nav li ul {
+    margin-top: 0.25em;
 }
 
-%# Hide from IE... it can't handle relative positioning with both a
-%# left and right set
-html>body #nav li ul {
-    left: 2em;
+#nav li {
+    display: inline;
+    margin-bottom: 1em;
+    padding: 0.2em 0 0.4em 0;
 }
 
+#nav li.first { padding-left: 1em; }
+
+#nav ul div div.wrapper {
+    text-align: left;
+    padding: 0.2em 1em 0.4em 0;
+}
+
+/****/
+
 #nav :link,
 #nav :visited
 {
@@ -112,19 +99,16 @@
     background: transparent url(<%$RT::WebImagesURL%>/css/light-arrow.png) no-repeat bottom center;
 }
 
-#nav li {
-    display: inline;
-    margin-bottom: 1em;
-    padding: 0.2em 0 0.4em 0;
-}
-
-#nav li.first { padding-left: 1em; }
+/*
+#nav ul { background: #069 url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
+#nav ul div { background: transparent url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
+#nav ul.odd { background: #08c url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
+#nav ul.odd div { background: transparent url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
+*/
 
-#nav div { display: inline; }
-#nav ul div { display: block; }
 
-#nav ul { background: #069 url(<%$RT::WebImagesURL%>/css/ct.gif) no-repeat top left; }
-#nav ul .first { background: transparent url(<%$RT::WebImagesURL%>/css/cb.gif) no-repeat bottom left; }
-#nav ul.odd { background: #08c url(<%$RT::WebImagesURL%>/css/ct-light.gif) no-repeat top left; }
-#nav ul.odd .first { background: transparent url(<%$RT::WebImagesURL%>/css/cb-light.gif) no-repeat bottom left; }
+#nav ul div.wrapper { background: transparent url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
+#nav ul div { background: #069 url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
+#nav ul.odd div.wrapper { background: transparent url(<%$RT::WebImagesURL%>/css/ctr.gif) no-repeat top right; }
+#nav ul div.odd { background: #08c url(<%$RT::WebImagesURL%>/css/cbr.gif) no-repeat bottom right; }
 

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/quickbar.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/quickbar.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/quickbar.css	Tue Nov 22 00:41:39 2005
@@ -1,14 +1,3 @@
-#logo {
-    float: left;
-    clear: left;
-}
-
-#logo img { border: none; }
-#logo div.rtname {
-    text-align: center;
-    font-weight: bold;
-}
-
 #quickbar #quick-personal {
     display: inline;
     color: #888;
@@ -34,6 +23,29 @@
 }
 
 #quickbar #topactions {
+    float: right;
+    clear: right;
+
     font-size: 0.9em;
-    padding: 0.5em 0 0 1em;
+    padding: 1em;
+}
+
+#quickbar #topactions form {
+    display: inline;
+    margin-left: 1em;
+}
+
+#quickbar #topactions form .button {
+    padding: 0 2px 0 2px;
+    font-size: 1em;
+    margin: 0;
+}
+
+#quickbar #topactions form .field {
+    padding: 1px;
+    font-size: 0.9em;
+}
+
+#quickbar #topactions form input.field {
+    padding: 3px;
 }

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/titlebox.css
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/titlebox.css	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/css/3.5-default/titlebox.css	Tue Nov 22 00:41:39 2005
@@ -3,6 +3,7 @@
 }
 
 .titlebox .titlebox-content {
+    margin-top: -1px;
     padding: 1em 2em 0.5em 2em;
     margin: 0;
     /*margin: 1em 2em 0.5em 2em;*/
@@ -26,7 +27,6 @@
 .titlebox .titlebox .titlebox-content
 {
     background: #eee;
-    margin-top: -1px;
     border-bottom: 1px solid #ccc;
     border-right: 1px solid #ccc;
     border-left: 0.5em solid #069;
@@ -124,3 +124,7 @@
 {
     text-decoration: underline;
 }
+
+.titlebox .titlebox-content hr.clear {
+    visibility: hidden;
+}

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/images/bplogo.gif
==============================================================================
Binary files. No diff available.

Modified: rt/branches/3.7-EXPERIMENTAL/html/NoAuth/js/util.js
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/NoAuth/js/util.js	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/NoAuth/js/util.js	Tue Nov 22 00:41:39 2005
@@ -1,5 +1,23 @@
+// Stolen from Prototype
+function $() {
+  var elements = new Array();
+
+  for (var i = 0; i < arguments.length; i++) {
+    var element = arguments[i];
+    if (typeof element == 'string')
+      element = document.getElementById(element);
+
+    if (arguments.length == 1)
+      return element;
+
+    elements.push(element);
+  }
+
+  return elements;
+}
+
 function rollup(id) {
-    var e   = document.getElementById(id);
+    var e   = $(id);
     var e2  = e.parentNode;
     
     if (e.className.match(/\bhidden\b/)) {
@@ -30,7 +48,7 @@
 }
 
 function hideshow(id) {
-    var e = document.getElementById(id);
+    var e = $(id);
     
     if (e.className.match(/\bhidden\b/))
         show(e);
@@ -53,46 +71,63 @@
 
 function switchVisibility(id1, id2) {
     // Show both and then hide the one we want
-    show(document.getElementById(id1));
-    show(document.getElementById(id2));
+    show($(id1));
+    show($(id2));
     
-    hide(document.getElementById(id2));
+    hide($(id2));
     
     return false;
 }
 
 function focusElementById(id) {
-    var e = document.getElementById(id);
+    var e = $(id);
     if (e) e.focus();
 }
 
 function openCalWindow(field) {
-    var objWindow = window.open('<%$RT::WebPath%>/Helpers/CalPopup.html?field='+field, '<% loc("Choose a date") %>', 'height=235,width=285,scrollbars=1');
+    var objWindow = window.open('<%$RT::WebPath%>/Helpers/CalPopup.html?field='+field, 
+                                'RT_Calendar', 
+                                'height=235,width=285,scrollbars=1');
     objWindow.focus();
 }
 
 function updateParentField(field, value) {
     if (window.opener) {
-        window.opener.document.getElementById(field).value = value;
+        window.opener.$(field).value = value;
         window.close();
     }
 }
 
+function addEvent(obj, sType, fn){
+    if (obj.addEventListener){
+        obj.addEventListener(sType, fn, false);
+    } else if (obj.attachEvent) {
+        var r = obj.attachEvent("on"+sType, fn);
+    } else {
+	return false;
+    }
+    return true;
+}
+
 function createCalendarLink(input) {
-    var e = document.getElementById(input);
+    var e = $(input);
     if (e) {
         var link = document.createElement('a');
         link.setAttribute('href', '#');
-        link.setAttribute('onclick', "openCalWindow('"+input+"'); return false;");
+
+        clickevent = function clickevent(e) { openCalWindow(input); return false; };
+        if (! addEvent(link, "click", clickevent)) {
+            return false;
+        }
         
         var text = document.createTextNode('<% loc("Choose a date") %>');
         link.appendChild(text);
-        
+
         var space = document.createTextNode(' ');
         
         e.parentNode.insertBefore(link, e.nextSibling);
         e.parentNode.insertBefore(space, e.nextSibling);
-        
+
         return true;
     }
     return false;

Modified: rt/branches/3.7-EXPERIMENTAL/html/Prefs/Quicksearch.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Prefs/Quicksearch.html	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Prefs/Quicksearch.html	Tue Nov 22 00:41:39 2005
@@ -58,7 +58,7 @@
 % unless ($unwanted->{$queue->Name}) {
 CHECKED
 % }
-><%$queue->Name%></li>
+><%$queue->Name%>: <%$queue->Description%></li>
 % }
 </ul>
 <& /Elements/Submit, Caption => loc("Save Changes"), Label => loc('Save'), Name => 'Save'&>

Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Bulk.html
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/SelfService/Display.html
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/SelfService/Elements/Tabs
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/SelfService/Elements/Tabs	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/SelfService/Elements/Tabs	Tue Nov 22 00:41:39 2005
@@ -52,6 +52,18 @@
 &>
 <a name="skipnav" id="skipnav" accesskey="8"></a>
 <%INIT>
+my $queues = RT::Queues->new($session{'CurrentUser'});
+$queues->UnLimit;
+
+my $queue_count = 0;
+my $queue_id = 1;
+
+while (my $queue = $queues->Next) {
+  next unless $queue->CurrentUserHasRight('CreateTicket');
+  $queue_id = $queue->id;
+  $queue_count++;
+  last if ($queue_count > 1);
+}
 
 if ($Title) {
 $Title = loc ("RT Self Service") . " / " . $Title;
@@ -65,11 +77,19 @@
                       },
              B => { title => loc('Closed tickets'),
                          path => 'SelfService/Closed.html',
-                       },
-             C => { title => loc('New ticket'),
-                    path => 'SelfService/CreateTicketInQueue.html'
-                    }
+                       }
            };
+
+if ($queue_count > 1) {
+        $tabs->{C} = { title => loc('New ticket'),
+                       path => 'SelfService/CreateTicketInQueue.html'
+                       };
+} else {
+        $tabs->{C} = { title => loc('New ticket'),
+                       path => 'SelfService/Create.html?Queue=' . $queue_id
+                       };
+}
+
 if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf',
 				       Object => $RT::System )) {
 	$tabs->{Z} = { title => loc('Preferences'),

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Display.html
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/EditBasics
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowHistory
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowHistory	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowHistory	Tue Nov 22 00:41:39 2005
@@ -43,31 +43,36 @@
 %# those contributions and any derivatives thereof.
 %# 
 %# END BPS TAGGED BLOCK }}}
+<%doc>
+#   This is (ab)used in Admin/(Users|Groups)/History.html and should probably
+#   be generalized at some point.
+</%doc>
 <%perl>
- if ($ShowDisplayModes or $ShowTitle) {
-my $title;
-my $titleright;
-if ($ShowTitle) {
-    $title = loc('History');
-}
-else {
-    $title = '&nbsp;';
-}
-$titleright = q[<span style="color: black">] . loc('Display mode') . ':</span> ';
-if ($ShowHeaders) {
-    $titleright .= qq{<a href="$URIFile?id=} .
-                   $Ticket->id.qq{">} .
-                   loc("Brief headers") .
-                   qq{</a> &mdash; };
-    $titleright .= q[<span class="selected">] . loc("Full headers") . "</span>";
-}
-else {
-    $titleright .= q[<span class="selected">] . loc("Brief headers") . "</span> &mdash; ";
-    $titleright .= qq{<a href="$URIFile?ShowHeaders=1;id=} .
-                   $Ticket->id.qq{">} .
-                   loc("Full headers") .
-                   qq{</a>};
-}
+if ($ShowDisplayModes or $ShowTitle) {
+    my $title = $ShowTitle
+                    ? loc('History')
+                    : '&nbsp;';
+
+    my $titleright;
+
+    if ($ShowDisplayModes) {
+        $titleright = q[<span style="color: black">] . loc('Display mode') . ':</span> ';
+        
+        if ($ShowHeaders) {
+            $titleright .= qq{<a href="$URIFile?id=} .
+                           $Ticket->id.qq{">} .
+                           loc("Brief headers") .
+                           qq{</a> &mdash; };
+            $titleright .= q[<span class="selected">] . loc("Full headers") . "</span>";
+        }
+        else {
+            $titleright .= q[<span class="selected">] . loc("Brief headers") . "</span> &mdash; ";
+            $titleright .= qq{<a href="$URIFile?ShowHeaders=1;id=} .
+                           $Ticket->id.qq{">} .
+                           loc("Full headers") .
+                           qq{</a>};
+        }
+    }
 </%perl>
 <& /Widgets/TitleBoxStart, title => $title, titleright => $titleright &>
 % }

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Elements/ShowTransactionAttachments
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/ModifyAll.html
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Reminders.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Ticket/Reminders.html	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Ticket/Reminders.html	Tue Nov 22 00:41:39 2005
@@ -49,7 +49,7 @@
     current_tab => "Ticket/Reminders.html?id=".$Ticket->Id, 
     Title => loc("Reminders for ticket #[_1]", $Ticket->Id) &>
 <form action="<%$RT::WebPath%>/Ticket/Reminders.html" method="post">
-<&|/Widget/TitleBox, title => loc("Reminders"),
+<&|/Widgets/TitleBox, title => loc("Reminders"),
                        title_class=> 'inverse',
                        color => "#666699" &>
 

Modified: rt/branches/3.7-EXPERIMENTAL/html/Ticket/Update.html
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/html/User/Elements/Tabs
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/User/Elements/Tabs	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/User/Elements/Tabs	Tue Nov 22 00:41:39 2005
@@ -67,6 +67,9 @@
 			 },
 	     };
 
+  # Now let callbacks add their extra tabs
+  $m->comp('/Elements/Callback', tabs => $tabs, %ARGS);
+
   foreach my $tab (sort keys %{$tabs}) {
     if ($tabs->{$tab}->{'path'} eq $current_tab) {
       $tabs->{$tab}->{"subtabs"} = $subtabs;

Modified: rt/branches/3.7-EXPERIMENTAL/html/Widgets/TitleBoxEnd
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Widgets/TitleBoxEnd	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Widgets/TitleBoxEnd	Tue Nov 22 00:41:39 2005
@@ -43,6 +43,7 @@
 %# those contributions and any derivatives thereof.
 %# 
 %# END BPS TAGGED BLOCK }}}
+    <hr class="clear" />
   </div>
 </div>
 

Modified: rt/branches/3.7-EXPERIMENTAL/html/autohandler
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT.pm.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT.pm.in	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT.pm.in	Tue Nov 22 00:41:39 2005
@@ -216,80 +216,100 @@
 
     unless ($RT::Logger) {
 
-    $RT::Logger=Log::Dispatch->new();
+    $RT::Logger = Log::Dispatch->new();
+
+    my $simple_cb = sub {
+        # if this code throw any warning we can get segfault
+        no warnings;
+
+        my %p = @_;
+
+        my $frame = 0; # stack frame index
+        # skip Log::* stack frames
+        $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
+
+        my ($package, $filename, $line) = caller($frame);
+        $p{message} =~ s/(?:\r*\n)+$//;
+        my $str = "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n";
+
+        if( $RT::LogStackTraces ) {
+            $str .= "\nStack trace:\n";
+            # skip calling of the Log::* subroutins
+            $frame++ while( caller($frame) && (caller($frame))[3] =~ /^Log::/ );
+            while( my ($package, $filename, $line, $sub) = caller($frame++) ) {
+                $str .= "\t". $sub ."() called at $filename:$line\n";
+            }
+        }
+        return $str;
+    };
+
+    my $syslog_cb = sub {
+        my %p = @_;
+
+        my $frame = 0; # stack frame index
+        # skip Log::* stack frames
+        $frame++ while( caller($frame) && caller($frame) =~ /^Log::/ );
+        my ($package, $filename, $line) = caller($frame);
+
+        # syswrite() cannot take utf8; turn it off here.
+        Encode::_utf8_off($p{message});
+
+        $p{message} =~ s/(?:\r*\n)+$//;
+        if ($p{level} eq 'debug') {
+            return "$p{message}\n"
+        } else {
+            return "$p{message} ($filename:$line)\n"
+        }
+    };
     
     if ($RT::LogToFile) {
-	my ($filename, $logdir);
-	if ($RT::LogToFileNamed =~ m![/\\]!) {
-	    # looks like an absolute path.
-	    $filename = $RT::LogToFileNamed;
-	    ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!;
-	}
-	else {
-	    $filename = "$RT::LogDir/$RT::LogToFileNamed";
-	    $logdir = $RT::LogDir;
-	}
-
-    unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
-        # localizing here would be hard when we don't have a current user yet
-        # die $self->loc("Log directory [_1] not found or couldn't be written.\n RT can't run.", $RT::LogDir);
-        die ("Log file $filename couldn't be written or created.\n RT can't run.");
-    }
-
-    package Log::Dispatch::File;
-    require Log::Dispatch::File;
-
-
-	  $RT::Logger->add(Log::Dispatch::File->new
-		       ( name=>'rtlog',
-			 min_level=> $RT::LogToFile,
-			 filename=> $filename,
-			 mode=>'append',
-			 callbacks => sub { my %p = @_;
-                                my ($package, $filename, $line) = caller(5);
-                                return "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n"}
-             
-             
-             
-		       ));
+        my ($filename, $logdir);
+        if ($RT::LogToFileNamed =~ m![/\\]!) {
+            # looks like an absolute path.
+            $filename = $RT::LogToFileNamed;
+            ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!;
+        }
+        else {
+            $filename = "$RT::LogDir/$RT::LogToFileNamed";
+            $logdir = $RT::LogDir;
+        }
+
+        unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) {
+            # localizing here would be hard when we don't have a current user yet
+            die "Log file $filename couldn't be written or created.\n RT can't run.";
+        }
+
+        package Log::Dispatch::File;
+        require Log::Dispatch::File;
+        $RT::Logger->add(Log::Dispatch::File->new
+                       ( name=>'rtlog',
+                         min_level=> $RT::LogToFile,
+                         filename=> $filename,
+                         mode=>'append',
+                         callbacks => $simple_cb,
+                       ));
     }
     if ($RT::LogToScreen) {
-	package Log::Dispatch::Screen;
-	require Log::Dispatch::Screen;
-	$RT::Logger->add(Log::Dispatch::Screen->new
-		     ( name => 'screen',
-		       min_level => $RT::LogToScreen,
-			 callbacks => sub { my %p = @_;
-                                my ($package, $filename, $line) = caller(5);
-                                return "[".gmtime(time)."] [".$p{level}."]: $p{message} ($filename:$line)\n"
-				},
-             
-		       stderr => 1
-		     ));
+        package Log::Dispatch::Screen;
+        require Log::Dispatch::Screen;
+        $RT::Logger->add(Log::Dispatch::Screen->new
+                     ( name => 'screen',
+                       min_level => $RT::LogToScreen,
+                       callbacks => $simple_cb,
+                       stderr => 1,
+                     ));
     }
     if ($RT::LogToSyslog) {
-	package Log::Dispatch::Syslog;
-	require Log::Dispatch::Syslog;
-	$RT::Logger->add(Log::Dispatch::Syslog->new
-		     ( name => 'syslog',
+        package Log::Dispatch::Syslog;
+        require Log::Dispatch::Syslog;
+        $RT::Logger->add(Log::Dispatch::Syslog->new
+                     ( name => 'syslog',
                        ident => 'RT',
-		       min_level => $RT::LogToSyslog,
-			 callbacks => sub { my %p = @_;
-                                my ($package, $filename, $line) = caller(5);
-
-				# syswrite() cannot take utf8; turn it off here.
-				Encode::_utf8_off($p{message});
-
-				if ($p{level} eq 'debug') {
-
-                                return "$p{message}\n" }
-				else {
-                                return "$p{message} ($filename:$line)\n"}
-				},
-             
-		       stderr => 1,
-               @RT::LogToSyslogConf
-		     ));
+                       min_level => $RT::LogToSyslog,
+                       callbacks => $syslog_cb,
+                       stderr => 1,
+                       @RT::LogToSyslogConf
+                     ));
     }
 
     }
@@ -301,28 +321,32 @@
 ## Mason).  It will log all problems through the standard logging
 ## mechanism (see above).
 
-$SIG{__WARN__} = sub {
-    my $w = shift;
-    $w =~ s/(?:\r*\n)+$//;
-    # The 'wide character' warnings has to be silenced for now, at least
-    # until HTML::Mason offers a sane way to process both raw output and
-    # unicode strings.
-    $RT::Logger->warning($w) if index($w, 'Wide character in ') != 0;
-};
+    $SIG{__WARN__} = sub {
+        # The 'wide character' warnings has to be silenced for now, at least
+        # until HTML::Mason offers a sane way to process both raw output and
+        # unicode strings.
+        # use 'goto &foo' syntax to hide ANON sub from stack
+        if( index($_[0], 'Wide character in ') != 0 ) {
+            unshift @_, $RT::Logger, qw(level warning message);
+            goto &Log::Dispatch::log;
+        }
+    };
 
 #When we call die, trap it and log->crit with the value of the die.
 
-$SIG{__DIE__}  = sub {
-    unless ($^S || !defined $^S ) {
-        $RT::Handle->Rollback();
-        $RT::Logger->crit("$_[0]");
-        exit(-1);
-    }
-    else {
-        #Get out of here if we're in an eval
-        die $_[0];
-    }
-};
+    $SIG{__DIE__}  = sub {
+        unless ($^S || !defined $^S ) {
+            $RT::Handle->Rollback();
+            $RT::Logger->crit("$_[0]");
+            # XXX: we should never exit, even if we are not in eval context
+            # could someone explane this code?
+            exit(-1);
+        }
+        else {
+            # Get out of here if we're in an eval
+            die $_[0];
+        }
+    };
 
 # }}}
 

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Action/SendEmail.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Action/SendEmail.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Action/SendEmail.pm	Tue Nov 22 00:41:39 2005
@@ -284,13 +284,12 @@
         }
     }
 
-    my $success =
-      ( $msgid
-      . " sent To: "
-      . $MIMEObj->head->get('To') . " Cc: "
-      . $MIMEObj->head->get('Cc') . " Bcc: "
-      . $MIMEObj->head->get('Bcc') );
-    $success =~ s/\n//gi;
+    my $success = $msgid . " sent ";
+    foreach( qw(To Cc Bcc) ) {
+        my $recipients = $MIMEObj->head->get($_);
+        $success .= " $_: ". $recipients if $recipients;
+    }
+    $success =~ s/\n//g;
 
     $self->RecordOutgoingMailTransaction($MIMEObj) if ($RT::RecordOutgoingEmail);
 
@@ -445,7 +444,7 @@
 
       # If there is one, and we can parse it, then base our Message-ID on it
       if ($msgid 
-          and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/
+          and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+)-\d+-\d+\@\Q$RT::Organization\E>$/
                          "<$1." . $self->TicketObj->id
                           . "-" . $self->ScripObj->id
                           . "-" . $self->ScripActionObj->{_Message_ID}

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Attachment_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Attachment_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Attachment_Overlay.pm	Tue Nov 22 00:41:39 2005
@@ -286,6 +286,7 @@
         return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding));
     }
 
+    # please, comment this code //ruz
     # Encode::_utf8_on($content);
     if (!$enc || $enc eq '' ||  $enc eq 'utf8' || $enc eq 'utf-8') {
         # If we somehow fail to do the decode, at least push out the raw bits

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Date.pm
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/cs.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/cs.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/cs.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
 "PO-Revision-Date: 2005-10-03 13:40-0400\n"
 "Last-Translator: Jan Okrouhly <okrouhly at civ.zcu.cz>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/da.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/da.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/da.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "PO-Revision-Date: 2005-10-03 13:42-0400\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/de.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/de.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/de.po	Tue Nov 22 00:41:39 2005
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-06-22 06:06+0200\n"
 "PO-Revision-Date: 2005-10-03 13:43-0400\n"
 "Last-Translator: Karsten Konrad <karsten.konrad at uni-graz.at>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/en.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/en.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/en.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "PO-Revision-Date: 2005-10-03 13:44-0400\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/es.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/es.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/es.po	Tue Nov 22 00:41:39 2005
@@ -1,9 +1,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2005-10-03 13:44-0400\n"
+"PO-Revision-Date: 2005-10-03 14:25-0400\n"
 "Last-Translator: Tomàs Núñez Lirola <tomasnl at dsl.upc.es>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"
 "MIME-Version: 1.0\n"
@@ -235,6 +235,11 @@
 msgid "%1 grouped by %2"
 msgstr ""
 
+#: html/Search/Chart:71
+#. ($Query, $PrimaryGroupBy)
+msgid "%1 grouped by %2"
+msgstr ""
+
 #: etc/initialdata:593
 msgid "%1 highest priority tickets I own"
 msgstr "Los %1 tickets de mayor prioridad que poseo..."
@@ -663,7 +668,7 @@
 
 #: html/Search/Build.html:109 html/Search/Build.html:94
 msgid "Add and Search"
-msgstr "Añadir criterio adicional"
+msgstr ""
 
 #: html/Search/Bulk.html:124
 msgid "Add comments or replies to selected tickets"
@@ -687,6 +692,14 @@
 
 #: lib/RT/CustomField_Overlay.pm:108
 msgid "Add, delete and modify custom field values for objects"
+msgstr ""
+
+#: html/Search/Bulk.html:159
+msgid "Add values"
+msgstr ""
+
+#: lib/RT/CustomField_Overlay.pm:108
+msgid "Add, delete and modify custom field values for objects"
 msgstr "Añadir, borrar y modificar campo personalizo para objetos"
 
 #: NOT FOUND IN SOURCE
@@ -1143,6 +1156,10 @@
 msgid "Combobox: Select or enter multiple values"
 msgstr ""
 
+#: lib/RT/CustomField_Overlay.pm:89
+msgid "Combobox: Select or enter multiple values"
+msgstr ""
+
 #: lib/RT/CustomField_Overlay.pm:90
 msgid "Combobox: Select or enter one value"
 msgstr ""
@@ -1979,10 +1996,6 @@
 msgid "Do anything and everything"
 msgstr "Hacer cualquier cosa y todo"
 
-#: html/Search/Build.html:112
-msgid "Do the Search"
-msgstr "Realizar búsqueda"
-
 #: html/Elements/Refresh:51
 msgid "Don't refresh this page."
 msgstr "No recargar esta página"
@@ -3071,6 +3084,10 @@
 msgid "Minutes"
 msgstr ""
 
+#: html/Elements/SelectTimeUnits:47
+msgid "Minutes"
+msgstr ""
+
 #: html/Search/Build.html:645
 msgid "Mismatched parentheses"
 msgstr "Parentesis no coincidentes"
@@ -3420,11 +3437,7 @@
 msgid "New Pending Approval"
 msgstr "Nueva pendiente de aprobación"
 
-#: html/Ticket/Elements/Tabs:193
-msgid "New Query"
-msgstr "Nueva Consulta"
-
-#: NOT FOUND IN SOURCE
+#: html/Ticket/Elements/Tabs:205
 msgid "New Search"
 msgstr "Nueva búsqueda"
 
@@ -4137,11 +4150,7 @@
 msgid "Pseudogroup for internal use"
 msgstr "Pseudogrupo para uso interno"
 
-#: html/Search/Elements/EditQuery:47
-msgid "Query"
-msgstr "Consulta"
-
-#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195
+#: html/Search/Build.html:121
 msgid "Query Builder"
 msgstr "Constructor de Consulta"
 
@@ -4209,11 +4218,11 @@
 
 #: html/Elements/Quicksearch:47 html/Prefs/Elements/Tabs:58 html/Prefs/Quicksearch.html:70
 msgid "Quick search"
-msgstr "Búsqueda rapida"
+msgstr ""
 
 #: html/Elements/QuickCreate:47
 msgid "Quick ticket creation"
-msgstr "Creación rápida de ticket"
+msgstr ""
 
 #: html/Search/Results.html:84
 msgid "RSS"
@@ -4597,6 +4606,10 @@
 
 #: html/Search/Elements/DisplayOptions:84
 msgid "Rows per page"
+msgstr ""
+
+#: html/Search/Elements/DisplayOptions:84
+msgid "Rows per page"
 msgstr "Filas por pagina"
 
 #: lib/RT/Date.pm:418
@@ -5700,10 +5713,6 @@
 msgid "Update"
 msgstr "Actualizar"
 
-#: html/Search/Bulk.html:178
-msgid "Update All"
-msgstr "Actualizar Todo"
-
 #: NOT FOUND IN SOURCE
 msgid "Update ID"
 msgstr "Id de actualización"
@@ -6097,7 +6106,7 @@
 
 #: html/Search/Results.html:86
 msgid "chart"
-msgstr "pertenece a"
+msgstr ""
 
 #: html/SelfService/Closed.html:49
 msgid "closed"
@@ -6139,10 +6148,6 @@
 msgid "deleted"
 msgstr "borrado"
 
-#: html/Search/Elements/PickBasics:128
-msgid "does not belong to"
-msgstr "no pertenece a"
-
 #: html/Search/Elements/PickBasics:61
 msgid "does not match"
 msgstr "no coincide"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fi.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fi.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fi.po	Tue Nov 22 00:41:39 2005
@@ -2,7 +2,7 @@
 # First Author: Janne Pirkkanen <jp at oppipoika.net>, Jul 2002
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-07-08 17:41+0200\n"
 "PO-Revision-Date: 2005-10-03 13:45-0400\n"
 "Last-Translator: Tuukka Vainio <tuukka.vainio at utu.fi>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fr.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fr.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/fr.po	Tue Nov 22 00:41:39 2005
@@ -1,11 +1,14 @@
-#
+# translation of fr.po to
+# Copyright (c) 2002 Jesse Vincent <jesse at bestpractical.com>
+# valid as of 3.5-TESTING r3738
+# jfenal <jfenal at gmail.com>, 2005.
+# jfenal <jfenal at free.fr>, 2005.
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
-"PO-Revision-Date: 2005-10-03 13:45-0400\n"
+"PO-Revision-Date: 2005-10-28 02:19+0200\n"
 "Last-Translator: jfenal <jfenal at free.fr>\n"
-"Language-Team: rt-devel <rt-devel at lists.fsck.com\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -23,13 +26,13 @@
 #. ($ticket->Id, $ticket->Subject)
 #. ($TicketObj->Id, $TicketObj->Subject)
 msgid "#%1: %2"
-msgstr "n°%1 : %2"
+msgstr "n°%1 : %2"
 
 #: html/Elements/ShowSearch:86
 msgid "$1"
 msgstr "$1"
 
-#: lib/RT/Record.pm:931
+#: lib/RT/Record.pm:938
 #. ($label)
 msgid "$prefix %1"
 msgstr "$prefix %1"
@@ -49,7 +52,7 @@
 msgid "%1 %2 %3 %4:%5:%6 %7"
 msgstr "%1 %2 %3 %4:%5:%6 %7"
 
-#: lib/RT/Record.pm:1676 lib/RT/Transaction_Overlay.pm:634 lib/RT/Transaction_Overlay.pm:677
+#: lib/RT/Record.pm:1682 lib/RT/Transaction_Overlay.pm:634 lib/RT/Transaction_Overlay.pm:677
 #. ($cf->Name, $new_value->Content)
 #. ($field, $self->NewValue)
 #. ($self->Field, $principal->Object->Name)
@@ -61,13 +64,13 @@
 msgid "%1 %2 ago"
 msgstr "il y a %1 %2"
 
-#: lib/RT/Record.pm:1683 lib/RT/Transaction_Overlay.pm:641
+#: lib/RT/Record.pm:1689 lib/RT/Transaction_Overlay.pm:641
 #. ($cf->Name, $old_content,                $new_value->Content)
 #. ($field, $self->OldValue, $self->NewValue)
 msgid "%1 %2 changed to %3"
 msgstr "%1 %2 changé en %3"
 
-#: lib/RT/Record.pm:1680 lib/RT/Transaction_Overlay.pm:637 lib/RT/Transaction_Overlay.pm:683
+#: lib/RT/Record.pm:1686 lib/RT/Transaction_Overlay.pm:637 lib/RT/Transaction_Overlay.pm:683
 #. ($cf->Name, $old_value->Content)
 #. ($field, $self->OldValue)
 #. ($self->Field, $principal->Object->Name)
@@ -84,7 +87,7 @@
 msgid "%1 (%2) by %3"
 msgstr "%1 (%2) par %3"
 
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:102 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:65
+#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:104 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:65
 #. (loc($DefaultStatus))
 #. (loc($Ticket->Status()))
 #. (loc($TicketObj->Status))
@@ -119,8 +122,12 @@
 msgid "%1 - Specify the search module you want to use"
 msgstr "%1 - Précisez la recherche que vous voulez utiliser"
 
-#: html/Elements/Footer:57
+#: html/Elements/Footer.mine:57 html/Elements/Footer.r3738:61 html/Elements/Footer.r3834:57 html/Elements/Footer:58 html/Elements/Footer:63
 #. ('&#187;&#124;&#171;', $RT::VERSION, '2005', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#. ('&#187;&#124;&#171;', 
+     $RT::VERSION, 
+     '2005', 
+    '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
 msgid "%1 RT %2 Copyright 1996-%3 %4."
 msgstr "%1 RT %2 Copyright 1996-%3 %4."
 
@@ -129,7 +136,7 @@
 msgid "%1 ScripAction loaded"
 msgstr "ScripAction %1 chargée"
 
-#: lib/RT/Record.pm:1713
+#: lib/RT/Record.pm:1719
 #. ($args{'Value'}, $cf->Name)
 msgid "%1 added as a value for %2"
 msgstr "%1 ajouté(e) comme valeur de %2"
@@ -153,16 +160,16 @@
 msgid "%1 changed from %2 to %3"
 msgstr "%1 changé(e) de %2 à %3"
 
-#: html/Search/Build.html:206
+#: html/Search/Build.html:213
 #. ($Description)
 msgid "%1 copy"
 msgstr "copie de %1"
 
-#: lib/RT/Record.pm:935
+#: lib/RT/Record.pm:942
 msgid "%1 could not be set to %2."
 msgstr "%1 n'a pas pu être positionné à %2."
 
-#: lib/RT/Ticket_Overlay.pm:2744
+#: lib/RT/Ticket_Overlay.pm:2752
 #. ($self)
 msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
 msgstr "%1 ne peut pas mettre le statut à résolu. La base de données RT est peut être incohérente."
@@ -196,10 +203,8 @@
 msgid "%1 is no longer a %2 for this queue."
 msgstr "%1 n'est plus un %2 pour cette file."
 
-#: html/Ticket/Elements/ShowBasics:58 html/Ticket/Elements/ShowBasics:64 html/Ticket/Elements/ShowBasics:69
-#. ($Ticket->TimeEstimated)
-#. ($Ticket->TimeWorked)
-#. ($Ticket->TimeLeft)
+#: html/Ticket/Elements/ShowTime:2 html/Ticket/Elements/ShowTime:4
+#. ($minutes)
 msgid "%1 min"
 msgstr "%1 min"
 
@@ -238,7 +243,7 @@
 #: lib/RT/Transaction_Overlay.pm:468
 #. ($self)
 msgid "%1: no attachment specified"
-msgstr "%1: pas d'attachement spécifié"
+msgstr "%1 : pas d'attachement spécifié"
 
 #: html/Ticket/Elements/ShowTransactionAttachments:78
 #. ($size)
@@ -250,6 +255,11 @@
 msgid "%1k"
 msgstr "%1k"
 
+#: html/Ticket/Elements/ShowTime:4
+#. (sprintf("%.1f",$minutes / 60))
+msgid "%quant(%1,hour)"
+msgstr ""
+
 #: lib/RT/Ticket_Overlay.pm:1119
 #. ($args{'Status'})
 msgid "'%1' is an invalid value for status"
@@ -315,7 +325,7 @@
 
 #: html/Admin/Elements/EditScrip:102
 msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
-msgstr "(Utilisez ces champs lorsque vous sélectionnez 'User Defined' pour une condition ou une action)"
+msgstr "(Utilisez ces champs lorsque vous sélectionnez « Défini par l'utilisateur » pour une condition ou une action)"
 
 #: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
 msgid "(empty)"
@@ -325,7 +335,7 @@
 msgid "(no name listed)"
 msgstr "(aucun nom)"
 
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:70 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/I18N/cs.po.mine:188 lib/RT/I18N/cs.po.r3619:184 lib/RT/I18N/cs.po.r3738:187 lib/RT/I18N/da.po.mine:185 lib/RT/I18N/da.po.r3619:181 lib/RT/I18N/da.po.r3738:187 lib/RT/I18N/de.po.mine:149 lib/RT/I18N/de.po.r3619:141 lib/RT/I18N/de.po.r3738:152 lib/RT/I18N/es.po.mine:198 lib/RT/I18N/es.po.r3619:194 lib/RT/I18N/es.po.r3738:197 lib/RT/I18N/fi.po.mine:191 lib/RT/I18N/fi.po.r3619:183 lib/RT/I18N/fi.po.r3738:186 lib/RT/I18N/fr.po.mine:155 lib/RT/I18N/fr.po.r3607:198 lib/RT/I18N/fr.po.r3619:149 lib/RT/I18N/he.po.mine:171 lib/RT/I18N/he.po.r3619:163 lib/RT/I18N/he.po.r3738:166 lib/RT/I18N/hu.po.mine:157 lib/RT/I18N/hu.po.r3619:150 lib/RT/I18N/hu.po.r3738:153 lib/RT/I18N/id.po.mine:157 lib/RT/I18N/id.po.r3619:149 lib/RT/I18N/id.po.r3738:152 lib/RT/I18N/it.po.mine:210 lib/RT/I18N/it.po.r3619:206 lib/RT/I18N/it.po.r3738:182 lib/RT/I18N/ja.po.mine:187 lib/RT/I18N/ja.po.r3619:183 lib/RT/I18N/ja.po.r3738:186 lib/RT/I18N/nl.po.mine:189 lib/RT/I18N/nl.po.r3619:185 lib/RT/I18N/nl.po.r3738:188 lib/RT/I18N/no.po.mine:201 lib/RT/I18N/no.po.r3619:197 lib/RT/I18N/no.po.r3738:200 lib/RT/I18N/pl.po.mine:190 lib/RT/I18N/pl.po.r3619:186 lib/RT/I18N/pl.po.r3738:189 lib/RT/I18N/pt_br.po.mine:198 lib/RT/I18N/pt_br.po.r3619:194 lib/RT/I18N/pt_br.po.r3738:197 lib/RT/I18N/ru.po.mine:181 lib/RT/I18N/ru.po.r3619:177 lib/RT/I18N/ru.po.r3738:180 lib/RT/I18N/zh_cn.po.mine:206 lib/RT/I18N/zh_cn.po.r3619:202 lib/RT/I18N/zh_cn.po.r3738:205 lib/RT/I18N/zh_tw.po.mine:206 lib/RT/I18N/zh_tw.po.r3619:202 lib/RT/I18N/zh_tw.po.r3738:205 lib/RT/Transaction_Overlay.pm:578
+#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:70 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/I18N/cs.po.mine:188 lib/RT/I18N/cs.po.r3619:184 lib/RT/I18N/cs.po.r3738:187 lib/RT/I18N/da.po.mine:185 lib/RT/I18N/da.po.r3619:181 lib/RT/I18N/da.po.r3738:187 lib/RT/I18N/de.po.mine:149 lib/RT/I18N/de.po.r3619:141 lib/RT/I18N/de.po.r3738:152 lib/RT/I18N/es.po.mine:198 lib/RT/I18N/es.po.r3619:194 lib/RT/I18N/es.po.r3738:197 lib/RT/I18N/fi.po.mine:191 lib/RT/I18N/fi.po.r3619:183 lib/RT/I18N/fi.po.r3738:186 lib/RT/I18N/fr.po.mine:155 lib/RT/I18N/fr.po.orig:153 lib/RT/I18N/fr.po.r3607:198 lib/RT/I18N/fr.po.r3619:149 lib/RT/I18N/he.po.mine:171 lib/RT/I18N/he.po.r3619:163 lib/RT/I18N/he.po.r3738:166 lib/RT/I18N/hu.po.mine:157 lib/RT/I18N/hu.po.r3619:150 lib/RT/I18N/hu.po.r3738:153 lib/RT/I18N/id.po.mine:157 lib/RT/I18N/id.po.r3619:149 lib/RT/I18N/id.po.r3738:152 lib/RT/I18N/it.po.mine:210 lib/RT/I18N/it.po.r3619:206 lib/RT/I18N/it.po.r3738:182 lib/RT/I18N/ja.po.mine:187 lib/RT/I18N/ja.po.r3619:183 lib/RT/I18N/ja.po.r3738:186 lib/RT/I18N/nl.po.mine:189 lib/RT/I18N/nl.po.r3619:185 lib/RT/I18N/nl.po.r3738:188 lib/RT/I18N/no.po.mine:201 lib/RT/I18N/no.po.r3619:197 lib/RT/I18N/no.po.r3738:200 lib/RT/I18N/pl.po.mine:190 lib/RT/I18N/pl.po.r3619:186 lib/RT/I18N/pl.po.r3738:189 lib/RT/I18N/pt_br.po.mine:198 lib/RT/I18N/pt_br.po.r3619:194 lib/RT/I18N/pt_br.po.r3738:197 lib/RT/I18N/ru.po.mine:181 lib/RT/I18N/ru.po.r3619:177 lib/RT/I18N/ru.po.r3738:180 lib/RT/I18N/zh_cn.po.mine:206 lib/RT/I18N/zh_cn.po.r3619:202 lib/RT/I18N/zh_cn.po.r3738:205 lib/RT/I18N/zh_tw.po.mine:206 lib/RT/I18N/zh_tw.po.r3619:202 lib/RT/I18N/zh_tw.po.r3738:205 lib/RT/Transaction_Overlay.pm:578
 msgid "(no value)"
 msgstr "(sans information)"
 
@@ -337,11 +347,11 @@
 msgid "(only one ticket)"
 msgstr "(un seul ticket)"
 
-#: html/Elements/RT__Ticket/ColumnMap:146
+#: html/Elements/RT__Ticket/ColumnMap:147
 msgid "(pending approval)"
 msgstr "(en attente d'approbation)"
 
-#: html/Elements/RT__Ticket/ColumnMap:149
+#: html/Elements/RT__Ticket/ColumnMap:150
 msgid "(pending other Collection)"
 msgstr "(en attente d'autres Collection)"
 
@@ -373,7 +383,7 @@
 msgid "<%$_%>"
 msgstr "<%$_%>"
 
-#: html/Search/Elements/DisplayOptions:65
+#: html/Search/Elements/DisplayOptions:73
 msgid "<%$field%>"
 msgstr "<%$field%>"
 
@@ -488,7 +498,7 @@
 msgid "Add these terms to your search"
 msgstr "Ajouter ces termes à la recherche"
 
-#: html/Search/Bulk.html:159
+#: html/Search/Bulk.html:158
 msgid "Add values"
 msgstr "Ajouter les valeurs"
 
@@ -509,7 +519,7 @@
 msgid "Added principal as a %1 for this queue"
 msgstr "Ajout groupe/utilisateur comme %1 pour cette file"
 
-#: lib/RT/Ticket_Overlay.pm:1417
+#: lib/RT/Ticket_Overlay.pm:1425
 #. ($self->loc($args{'Type'}))
 msgid "Added principal as a %1 for this ticket"
 msgstr "Ajout groupe/utilisateur comme %1 pour ce ticket"
@@ -619,17 +629,17 @@
 #. ($ticket->id, $msg)
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
 msgid "Approval #%1: %2"
-msgstr "Approbation #%1 : %2"
+msgstr "Approbation #%1 : %2"
 
 #: html/Approvals/index.html:75
 #. ($ticket->Id)
 msgid "Approval #%1: Notes not recorded due to a system error"
-msgstr "Approbation #%1: Notes non enregistrées à cause d'une erreur système"
+msgstr "Approbation #%1 : Notes non enregistrées à cause d'une erreur système"
 
 #: html/Approvals/index.html:73
 #. ($ticket->Id)
 msgid "Approval #%1: Notes recorded"
-msgstr "Approbation #%1: Notes enregistrées"
+msgstr "Approbation #%1 : Notes enregistrées"
 
 #: etc/initialdata:351
 msgid "Approval Passed"
@@ -645,17 +655,21 @@
 
 #: etc/initialdata:504
 msgid "Approver's notes: %1"
-msgstr "Notes de l'approbateur : %1"
+msgstr "Notes de l'approbateur : %1"
 
 #: lib/RT/Date.pm:440
 msgid "Apr."
 msgstr "Avr."
 
-#: NOT FOUND IN SOURCE
+#: html/CalPopup.html:45
 msgid "April"
-msgstr "Avril"
+msgstr ""
 
-#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73
+#: html/Search/Elements/DisplayOptions:81
+msgid "Asc"
+msgstr ""
+
+#: html/Elements/SelectSortOrder:56
 msgid "Ascending"
 msgstr "Croissant"
 
@@ -688,7 +702,7 @@
 msgid "Attachment created"
 msgstr "Attachement créé"
 
-#: lib/RT/Tickets_Overlay.pm:1749
+#: lib/RT/Tickets_Overlay.pm:1897
 msgid "Attachment filename"
 msgstr "Nom de fichier de l'attachement"
 
@@ -704,6 +718,10 @@
 msgid "Aug."
 msgstr "Aoû."
 
+#: html/CalPopup.html:46
+msgid "August"
+msgstr ""
+
 #: etc/initialdata:221
 msgid "Autoreply"
 msgstr "RéponseAuto"
@@ -744,7 +762,7 @@
 msgid "Bold"
 msgstr "Gras"
 
-#: html/Search/Results.html:82
+#: html/Search/Results.html:79
 msgid "Bookmarkable link"
 msgstr "Lien prédéfini"
 
@@ -773,7 +791,7 @@
 msgid "Can't find a collection class for '%1'"
 msgstr "Impossible de trouver une collection pour la classe '%1'"
 
-#: html/Search/Build.html:742
+#: html/Search/Build.html:744
 msgid "Can't find a saved search to work with"
 msgstr "Impossible de trouver une recherche sauvée et de l'utiliser"
 
@@ -781,18 +799,18 @@
 msgid "Can't link a ticket to itself"
 msgstr "Un ticket ne peut être lié à lui même"
 
-#: html/Search/Build.html:748
+#: html/Search/Build.html:750
 msgid "Can't save this search"
 msgstr "Impossible de sauver cette recherche"
 
-#: lib/RT/Record.pm:1271 lib/RT/Record.pm:1349
+#: lib/RT/Record.pm:1278 lib/RT/Record.pm:1356
 msgid "Can't specifiy both base and target"
 msgstr "Impossible de spécifier à la fois la base et la cible"
 
-#: html/autohandler:166
+#: html/autohandler:171
 #. ($msg)
 msgid "Cannot create user: %1"
-msgstr "Impossible de créer l'utilisateur : %1"
+msgstr "Impossible de créer l'utilisateur : %1"
 
 #: html/Admin/Elements/AddCustomFieldValue:62 html/Admin/Elements/EditCustomFieldValues:58
 msgid "Category"
@@ -848,15 +866,15 @@
 
 #: lib/RT/CustomField_Overlay.pm:89
 msgid "Combobox: Select or enter multiple values"
-msgstr "Boîte combo : Sélectionnez ou saisissez plusieurs valeurs"
+msgstr "Boîte combo : Sélectionnez ou saisissez plusieurs valeurs"
 
 #: lib/RT/CustomField_Overlay.pm:90
 msgid "Combobox: Select or enter one value"
-msgstr "Boîte combo : Sélectionnez ou saisissez une valeur"
+msgstr "Boîte combo : Sélectionnez ou saisissez une valeur"
 
 #: lib/RT/CustomField_Overlay.pm:91
 msgid "Combobox: Select or enter up to %1 values"
-msgstr "Combobox: Sélectionner ou saisir au plus %1 valeurs"
+msgstr "Boîte combo : Sélectionner ou saisir au plus %1 valeurs"
 
 #: html/Ticket/Elements/ShowTransaction:190 html/Ticket/Elements/Tabs:178
 msgid "Comment"
@@ -934,16 +952,16 @@
 msgid "Correspondence added"
 msgstr "Courrier ajouté"
 
-#: lib/RT/Record.pm:1698
+#: lib/RT/Record.pm:1704
 msgid "Could not add new custom field value. "
 msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. "
 
-#: lib/RT/Record.pm:1651
+#: lib/RT/Record.pm:1657
 #. (, $value_msg)
 msgid "Could not add new custom field value. %1 "
 msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. %1"
 
-#: lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3013 lib/RT/Ticket_Overlay.pm:3030
+#: lib/RT/Ticket_Overlay.pm:3013 lib/RT/Ticket_Overlay.pm:3021 lib/RT/Ticket_Overlay.pm:3038
 msgid "Could not change owner. "
 msgstr "Impossible de changer l'intervenant. "
 
@@ -956,7 +974,7 @@
 #: html/Admin/Elements/EditCustomField:113
 #. ($msg)
 msgid "Could not create CustomField: %1"
-msgstr "Impossible de créer le champ personnalisé : %1"
+msgstr "Impossible de créer le champ personnalisé : %1"
 
 #: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501
 msgid "Could not create group"
@@ -965,7 +983,7 @@
 #: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
 #. ($msg)
 msgid "Could not create template: %1"
-msgstr "Impossible de créer le modèle : %1"
+msgstr "Impossible de créer le modèle : %1"
 
 #: lib/RT/Ticket_Overlay.pm:1052 lib/RT/Ticket_Overlay.pm:397
 msgid "Could not create ticket. Queue not set"
@@ -975,11 +993,11 @@
 msgid "Could not create user"
 msgstr "Impossible de créer l'utilisateur"
 
-#: lib/RT/Queue_Overlay.pm:742 lib/RT/Ticket_Overlay.pm:1385
+#: lib/RT/Queue_Overlay.pm:742 lib/RT/Ticket_Overlay.pm:1393
 msgid "Could not find or create that user"
 msgstr "Impossible de trouver ou créer cet utilisateur"
 
-#: lib/RT/Queue_Overlay.pm:803 lib/RT/Ticket_Overlay.pm:1466
+#: lib/RT/Queue_Overlay.pm:803 lib/RT/Ticket_Overlay.pm:1474
 msgid "Could not find that principal"
 msgstr "Impossible de trouver ce groupe ou utilisateur"
 
@@ -1005,7 +1023,7 @@
 msgid "Could not make that principal a %1 for this queue"
 msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette file"
 
-#: lib/RT/Ticket_Overlay.pm:1406
+#: lib/RT/Ticket_Overlay.pm:1414
 #. ($self->loc($args{'Type'}))
 msgid "Could not make that principal a %1 for this ticket"
 msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour ce ticket"
@@ -1023,12 +1041,12 @@
 msgid "Couldn't add member to group"
 msgstr "Impossible d'ajouter un membre à ce groupe"
 
-#: lib/RT/Record.pm:1710 lib/RT/Record.pm:1762
+#: lib/RT/Record.pm:1716 lib/RT/Record.pm:1768
 #. ($Msg)
 msgid "Couldn't create a transaction: %1"
-msgstr "Impossible de créer une transaction : %1"
+msgstr "Impossible de créer une transaction : %1"
 
-#: lib/RT/Record.pm:944
+#: lib/RT/Record.pm:951
 msgid "Couldn't find row"
 msgstr "Colonne introuvable"
 
@@ -1084,12 +1102,12 @@
 msgid "Couldn't load ticket '%1'"
 msgstr "Impossible de charger le ticket '%1'"
 
-#: lib/RT/Ticket_Overlay.pm:2613
+#: lib/RT/Ticket_Overlay.pm:2621
 #. ($args{'Base'})
 msgid "Couldn't resolve base '%1' into a URI."
 msgstr "Impossible de résoudre la base '%1' dans une URI."
 
-#: lib/RT/Ticket_Overlay.pm:2612
+#: lib/RT/Ticket_Overlay.pm:2620
 #. ($args{'Target'})
 msgid "Couldn't resolve target '%1' into a URI."
 msgstr "Impossible de résoudre la cible '%1' dans une URI."
@@ -1250,17 +1268,17 @@
 msgid "Custom condition"
 msgstr "Condition personnalisée"
 
-#: lib/RT/Tickets_Overlay.pm:2223
+#: lib/RT/Tickets_Overlay.pm:2368
 #. ($CF->Name)
 msgid "Custom field %1 has a value."
 msgstr "Le champ personnalisé %1 a une valeur."
 
-#: lib/RT/Tickets_Overlay.pm:2219
+#: lib/RT/Tickets_Overlay.pm:2364
 #. ($CF->Name)
 msgid "Custom field %1 has no value."
 msgstr "Le champ personnalisé %1 n'a pas de valeur."
 
-#: lib/RT/Record.pm:1584 lib/RT/Record.pm:1745
+#: lib/RT/Record.pm:1590 lib/RT/Record.pm:1751
 #. ($args{'Field'})
 msgid "Custom field %1 not found"
 msgstr "Le champ personnalisé %1 est introuvable"
@@ -1298,6 +1316,10 @@
 msgid "Dec."
 msgstr "Déc."
 
+#: html/CalPopup.html:48
+msgid "December"
+msgstr ""
+
 #: etc/initialdata:222
 msgid "Default Autoresponse template"
 msgstr "Modèle de réponse automatique par défaut"
@@ -1353,7 +1375,7 @@
 #: lib/RT/SavedSearch.pm:211
 #. ($msg)
 msgid "Delete failed: %1"
-msgstr "Échec de la destruction : %1"
+msgstr "Échec de la destruction : %1"
 
 #: html/Admin/Elements/EditScrips:74
 msgid "Delete selected scrips"
@@ -1363,7 +1385,7 @@
 msgid "Delete tickets"
 msgstr "Supprimer les tickets"
 
-#: html/Search/Bulk.html:160
+#: html/Search/Bulk.html:159
 msgid "Delete values"
 msgstr "Supprimer les valeurs"
 
@@ -1415,11 +1437,11 @@
 msgid "Depends on"
 msgstr "Dépend de"
 
-#: NOT FOUND IN SOURCE
-msgid "DependsOn"
-msgstr "DépendDe"
+#: html/Search/Elements/DisplayOptions:86
+msgid "Desc"
+msgstr ""
 
-#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78
+#: html/Elements/SelectSortOrder:56
 msgid "Descending"
 msgstr "Décroissant"
 
@@ -1459,7 +1481,7 @@
 msgid "Display saved searches for this group"
 msgstr "Afficher les recherches sauvegardées de ce groupe"
 
-#: html/Elements/Footer:63
+#: html/Elements/Footer.mine:63 html/Elements/Footer.r3738:67 html/Elements/Footer.r3834:62 html/Elements/Footer:69
 msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
 msgstr "Distribué selon les termes de la version 2 de la <a href=\"http://www.gnu.org/copyleft/gpl.html\">licence GNU GPL.</a>"
 
@@ -1508,7 +1530,7 @@
 msgid "Edit Custom Fields for tickets in all queues"
 msgstr "Modifier les champs personnalisés pour les tickets de toutes les files"
 
-#: html/Search/Bulk.html:189 html/Ticket/ModifyLinks.html:57
+#: html/Search/Bulk.html:188 html/Ticket/ModifyLinks.html:57
 msgid "Edit Links"
 msgstr "Modifier les liens"
 
@@ -1557,7 +1579,7 @@
 msgid "Editing membership for personal group %1"
 msgstr "Modifier les membres du groupe personnel %1"
 
-#: lib/RT/Record.pm:1286 lib/RT/Record.pm:1363
+#: lib/RT/Record.pm:1293 lib/RT/Record.pm:1370
 msgid "Either base or target must be specified"
 msgstr "La base ou la cible doivent être spécifiées"
 
@@ -1593,7 +1615,7 @@
 #: html/Admin/CustomFields/Modify.html:159 html/Admin/Queues/Modify.html:162
 #. (loc_fuzzy($msg))
 msgid "Enabled status: %1"
-msgstr "État actif : %1"
+msgstr "État actif : %1"
 
 #: lib/RT/CustomField_Overlay.pm:64
 msgid "Enter multiple values"
@@ -1611,7 +1633,7 @@
 msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
 msgstr "Saisir des noms de files ou des URI pour lier aux files. Séparer les saisies avec des espaces."
 
-#: html/Elements/EditLinks:119 html/Search/Bulk.html:190
+#: html/Elements/EditLinks:119 html/Search/Bulk.html:189
 msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
 msgstr "Saisir des n° de tickets ou des URI pour lier aux tickets. Séparer les saisies par des espaces."
 
@@ -1619,7 +1641,7 @@
 msgid "Enter up to %1 values"
 msgstr "Saisir au plus %1 valeurs"
 
-#: html/Elements/Login:78 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: html/Elements/Login:76 html/SelfService/Error.html:46 html/SelfService/Error.html:47
 msgid "Error"
 msgstr "Erreur"
 
@@ -1631,11 +1653,11 @@
 msgid "Error in parameters to Queue->DeleteWatcher"
 msgstr "Erreur dans les paramètre de Queue->DeleteWatcher"
 
-#: lib/RT/Ticket_Overlay.pm:1334
+#: lib/RT/Ticket_Overlay.pm:1342
 msgid "Error in parameters to Ticket->AddWatcher"
 msgstr "Erreur de paramètres pour Ticket->AddWatcher"
 
-#: lib/RT/Ticket_Overlay.pm:1500
+#: lib/RT/Ticket_Overlay.pm:1508
 msgid "Error in parameters to Ticket->DeleteWatcher"
 msgstr "Erreur dans les paramètres de Ticket->DeleteWatcher"
 
@@ -1653,7 +1675,7 @@
 
 #: bin/rt-crontool:219
 msgid "Example:"
-msgstr "Exemple :"
+msgstr "Exemple : "
 
 #: html/Admin/Users/Modify.html:99
 msgid "Extra info"
@@ -1685,6 +1707,10 @@
 msgid "Feb."
 msgstr "Fév."
 
+#: html/CalPopup.html:45
+msgid "February"
+msgstr ""
+
 #: html/Elements/SelectAttachmentField:50
 msgid "Filename"
 msgstr "NomFichier"
@@ -1713,7 +1739,7 @@
 msgid "Fill in up to %1 wikitext areas"
 msgstr "Saisir au plus %1 champs de type wiki"
 
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:180 html/Ticket/Elements/EditBasics:92 lib/RT/Tickets_Overlay.pm:1645
+#: html/Search/Elements/PickBasics:150 html/Ticket/Create.html:180 html/Ticket/Elements/EditBasics:92 lib/RT/Tickets_Overlay.pm:1793
 msgid "Final Priority"
 msgstr "Priorité finale"
 
@@ -1729,7 +1755,7 @@
 msgid "Find people whose"
 msgstr "Trouver les gens dont"
 
-#: html/Search/Results.html:144
+#: html/Search/Results.html:147
 msgid "Find tickets"
 msgstr "Rechercher des tickets"
 
@@ -1743,7 +1769,7 @@
 
 #: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
 msgid "Foo!"
-msgstr "Foo !"
+msgstr "Foo ! "
 
 #: html/Search/Bulk.html:83
 msgid "Force change"
@@ -1753,30 +1779,18 @@
 msgid "Format"
 msgstr "Format"
 
-#: html/Search/Results.html:142
+#: html/Search/Results.html:145
 #. ($ticketcount)
 msgid "Found %quant(%1,ticket)"
 msgstr "Trouvé %quant(%1,ticket)"
 
-#: lib/RT/Record.pm:947
+#: lib/RT/Record.pm:954
 msgid "Found Object"
 msgstr "Objet trouvé"
 
-#: NOT FOUND IN SOURCE
-msgid "Freeform"
-msgstr "FormulaireLibre"
-
-#: NOT FOUND IN SOURCE
-msgid "FreeformContactInfo"
-msgstr "SaisieLibreInfoContact"
-
-#: NOT FOUND IN SOURCE
-msgid "FreeformMultiple"
-msgstr "SaisieLibreMultiple"
-
-#: NOT FOUND IN SOURCE
-msgid "FreeformSingle"
-msgstr "SaisieLibreSimple"
+#: html/CalPopup.html:44
+msgid "Fri"
+msgstr ""
 
 #: lib/RT/Date.pm:417
 msgid "Fri."
@@ -1788,7 +1802,7 @@
 
 #: html/Tools/Offline.html:87
 msgid "Get template from file"
-msgstr "Obtenir le modèle àpartir d'un fichier"
+msgstr "Obtenir le modèle à partir d'un fichier"
 
 #: lib/RT/Transaction_Overlay.pm:671
 #. ($New->Name)
@@ -1810,15 +1824,15 @@
 #: html/Admin/Elements/SelectTemplate:59
 #. (loc($Template->Name))
 msgid "Global template: %1"
-msgstr "Modèle global : %1"
+msgstr "Modèle global :  %1"
 
-#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:95 html/Tools/Offline.html:91
+#: html/Admin/CustomFields/index.html:80 html/Search/Results.html:90 html/Tools/Offline.html:91
 msgid "Go"
 msgstr "Go"
 
-#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:77 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
+#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Elements/RefreshHomepage:48 html/Search/Results.html:74 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57
 msgid "Go!"
-msgstr "Go!"
+msgstr "Go !"
 
 #: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
 msgid "Goto ticket"
@@ -1849,7 +1863,7 @@
 msgid "Group has no such member"
 msgstr "Un tel membre n'appartient pas au groupe"
 
-#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:809 lib/RT/Ticket_Overlay.pm:1392 lib/RT/Ticket_Overlay.pm:1472
+#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:809 lib/RT/Ticket_Overlay.pm:1400 lib/RT/Ticket_Overlay.pm:1480
 msgid "Group not found"
 msgstr "Groupe introuvable"
 
@@ -1871,7 +1885,7 @@
 
 #: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
 msgid "Hello!"
-msgstr "Bonjour !"
+msgstr "Bonjour !"
 
 #: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
 #. ($name)
@@ -1905,11 +1919,11 @@
 msgid "I have %quant(%1,concrete mixer)."
 msgstr "J'ai %quant(%1, toupie à béton)."
 
-#: html/Search/Build.html:615
+#: html/Search/Build.html:400
 msgid "I'm lost"
 msgstr "Je suis perdu"
 
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1570
+#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1718
 msgid "Id"
 msgstr "Identifiant"
 
@@ -1937,11 +1951,11 @@
 msgid "If you've updated anything above, be sure to"
 msgstr "Si vous avez fait une modification, assurez vous de"
 
-#: lib/RT/Record.pm:938
+#: lib/RT/Record.pm:945
 msgid "Illegal value for %1"
 msgstr "Valeur incorrecte pour %1"
 
-#: lib/RT/Record.pm:941
+#: lib/RT/Record.pm:948
 msgid "Immutable field"
 msgstr "Champ non modifiable"
 
@@ -1957,15 +1971,15 @@
 msgid "Include disabled users in search."
 msgstr "Inclure les utilisateurs désactivés dans le résultat."
 
-#: html/Search/Build.html:641
+#: html/Search/Build.html:426
 msgid "Incomplete Query"
 msgstr "Requête incomplète"
 
-#: html/Search/Build.html:638
+#: html/Search/Build.html:423
 msgid "Incomplete query"
 msgstr "Requête incomplète"
 
-#: html/Search/Elements/PickBasics:148 lib/RT/Tickets_Overlay.pm:1620
+#: html/Search/Elements/PickBasics:149 lib/RT/Tickets_Overlay.pm:1768
 msgid "Initial Priority"
 msgstr "Priorité initiale"
 
@@ -1983,14 +1997,14 @@
 msgid "Input must match %1"
 msgstr "La valeur saisie doit correspondre à %1"
 
-#: lib/RT/Ticket_Overlay.pm:3460
+#: lib/RT/Ticket_Overlay.pm:3468
 msgid "Internal Error"
 msgstr "Erreur interne"
 
 #: lib/RT/Record.pm:309
 #. ($id->{error_message})
 msgid "Internal Error: %1"
-msgstr "Erreur interne : %1"
+msgstr "Erreur interne : %1"
 
 #: lib/RT/Group_Overlay.pm:668
 msgid "Invalid Group Type"
@@ -2000,14 +2014,14 @@
 msgid "Invalid Right"
 msgstr "Droit invalide"
 
-#: lib/RT/Record.pm:943
+#: lib/RT/Record.pm:950
 msgid "Invalid data"
 msgstr "Données invalides"
 
 #: lib/RT/CustomField_Overlay.pm:207 lib/RT/CustomField_Overlay.pm:677
 #. ($msg)
 msgid "Invalid pattern: %1"
-msgstr "Motif invalide : %1"
+msgstr "Motif invalide : %1"
 
 #: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276
 msgid "Invalid queue"
@@ -2022,7 +2036,7 @@
 msgid "Invalid value for %1"
 msgstr "File invalide pour %1"
 
-#: lib/RT/Record.pm:1602
+#: lib/RT/Record.pm:1608
 msgid "Invalid value for custom field"
 msgstr "Valeur incorrecte pour le champ personnalisé"
 
@@ -2040,7 +2054,7 @@
 
 #: bin/rt-crontool:188
 msgid "It takes several arguments:"
-msgstr "Il faut plusieurs paramètres :"
+msgstr "Il faut plusieurs paramètres : "
 
 #: html/Search/Elements/EditFormat:85
 msgid "Italic"
@@ -2050,6 +2064,10 @@
 msgid "Jan."
 msgstr "Jan."
 
+#: html/CalPopup.html:45
+msgid "January"
+msgstr ""
+
 #: lib/RT/Group_Overlay.pm:166
 msgid "Join or leave this group"
 msgstr "Rejoignez ou quittez ce groupe"
@@ -2058,6 +2076,10 @@
 msgid "Jul."
 msgstr "Jul."
 
+#: html/CalPopup.html:46
+msgid "July"
+msgstr ""
+
 #: html/Ticket/Elements/Tabs:124
 msgid "Jumbo"
 msgstr "Tout"
@@ -2066,6 +2088,10 @@
 msgid "Jun."
 msgstr "Jun."
 
+#: html/CalPopup.html:46
+msgid "June"
+msgstr ""
+
 #: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
 msgid "Language"
 msgstr "Langue"
@@ -2110,25 +2136,25 @@
 msgid "Link"
 msgstr "Relation"
 
-#: lib/RT/Record.pm:1297
+#: lib/RT/Record.pm:1304
 msgid "Link already exists"
 msgstr "Le lien existe déja"
 
-#: lib/RT/Record.pm:1311
+#: lib/RT/Record.pm:1318
 msgid "Link could not be created"
 msgstr "Le lien ne peut être ajouté"
 
-#: lib/RT/Record.pm:1317
+#: lib/RT/Record.pm:1324
 #. ($TransString)
 msgid "Link created (%1)"
 msgstr "Le lien est ajouté (%1)"
 
-#: lib/RT/Record.pm:1378
+#: lib/RT/Record.pm:1385
 #. ($TransString)
 msgid "Link deleted (%1)"
 msgstr "Le lien est effacé (%1)"
 
-#: lib/RT/Record.pm:1384
+#: lib/RT/Record.pm:1391
 msgid "Link not found"
 msgstr "Lien introuvable"
 
@@ -2141,13 +2167,13 @@
 msgid "Links"
 msgstr "Relations"
 
-#: html/Search/Elements/EditSearches:76
+#: html/Search/Elements/EditSearches:73
 msgid "Load"
 msgstr "Charger"
 
-#: html/Search/Elements/EditSearches:74
+#: html/Search/Elements/EditSearches:71
 msgid "Load saved search:"
-msgstr "Charger les recherches sauvées :"
+msgstr "Charger les recherches sauvées :"
 
 #: lib/RT/System.pm:87
 msgid "LoadSavedSearch"
@@ -2166,21 +2192,20 @@
 msgid "Location"
 msgstr "Localisation"
 
-#: lib/RT.pm:212
-#. ($RT::LogDir)
+#: NOT FOUND IN SOURCE
 msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
 msgstr "Le répertoire de journalisation %1 est introuvable ou inaccessible en écriture.\\n RT ne peut être lancé."
 
-#: html/Elements/Header:82
+#: html/Elements/Header:84
 #. ("<span>".$session{'CurrentUser'}->Name."</span>")
 msgid "Logged in as %1"
 msgstr "Connecté en tant que %1"
 
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:102 html/Elements/Login:68 html/Elements/Login:86 lib/RT/StyleGuide.pod:797
+#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:100 html/Elements/Login:68 html/Elements/Login:84 lib/RT/StyleGuide.pod:797
 msgid "Login"
 msgstr "Connexion"
 
-#: html/Elements/Header:92
+#: html/Elements/Header:94
 msgid "Logout"
 msgstr "Déconnexion"
 
@@ -2256,6 +2281,14 @@
 msgid "Mar."
 msgstr "Mar."
 
+#: html/CalPopup.html:45
+msgid "March"
+msgstr ""
+
+#: html/CalPopup.html:46
+msgid "May"
+msgstr ""
+
 #: lib/RT/Date.pm:441
 msgid "May."
 msgstr "Mai."
@@ -2309,15 +2342,15 @@
 msgid "Memberships of the user %1"
 msgstr "Affiliations de l'utilisateur %1"
 
-#: lib/RT/Ticket_Overlay.pm:2850
+#: lib/RT/Ticket_Overlay.pm:2858
 msgid "Merge Successful"
 msgstr "Fusion réussie"
 
-#: lib/RT/Ticket_Overlay.pm:2737
+#: lib/RT/Ticket_Overlay.pm:2745
 msgid "Merge failed. Couldn't set EffectiveId"
 msgstr "Échec de fusion. Ne peut appliquer EffectiveId"
 
-#: lib/RT/Ticket_Overlay.pm:2745
+#: lib/RT/Ticket_Overlay.pm:2753
 msgid "Merge failed. Couldn't set Status"
 msgstr "Échec de fusion. Ne peut appliquer Status"
 
@@ -2334,11 +2367,11 @@
 msgid "Message"
 msgstr "Message"
 
-#: lib/RT/Ticket_Overlay.pm:2407
+#: lib/RT/Ticket_Overlay.pm:2415
 msgid "Message could not be recorded"
 msgstr "Le message ne peut être sauvegardé"
 
-#: lib/RT/Ticket_Overlay.pm:2410
+#: lib/RT/Ticket_Overlay.pm:2418
 msgid "Message recorded"
 msgstr "Message sauvegardé"
 
@@ -2350,13 +2383,13 @@
 msgid "Minutes"
 msgstr "Minutes"
 
-#: html/Search/Build.html:645
+#: html/Search/Build.html:430
 msgid "Mismatched parentheses"
 msgstr "Parenthèses non correspondantes"
 
-#: lib/RT/Record.pm:945
+#: lib/RT/Record.pm:952
 msgid "Missing a primary key?: %1"
-msgstr "Clé primaire manquante ? : %1"
+msgstr "Clé primaire manquante ? : %1"
 
 #: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93
 msgid "Mobile"
@@ -2581,6 +2614,10 @@
 msgid "ModifyTicket"
 msgstr "ModifierTicket"
 
+#: html/CalPopup.html:43
+msgid "Mon"
+msgstr ""
+
 #: lib/RT/Date.pm:413
 msgid "Mon."
 msgstr "Lun."
@@ -2619,7 +2656,7 @@
 msgid "My saved searches"
 msgstr "Mes recherches"
 
-#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:158 html/User/Groups/Modify.html:65
+#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/Search/Bulk.html:157 html/User/Groups/Modify.html:65
 msgid "Name"
 msgstr "Nom"
 
@@ -2669,7 +2706,7 @@
 
 #: html/Ticket/Elements/Reminders:71
 msgid "New reminder:"
-msgstr "Nouveau rappel :"
+msgstr "Nouveau rappel :"
 
 #: html/Admin/Elements/SelectRights:65
 msgid "New rights"
@@ -2687,7 +2724,7 @@
 msgid "New ticket"
 msgstr "Nouveau ticket"
 
-#: lib/RT/Ticket_Overlay.pm:2714
+#: lib/RT/Ticket_Overlay.pm:2722
 msgid "New ticket doesn't exist"
 msgstr "Nouveau ticket inconnu"
 
@@ -2731,7 +2768,7 @@
 msgid "No Group defined"
 msgstr "Aucun groupe défini"
 
-#: lib/RT/Tickets_Overlay_SQL.pm:480
+#: lib/RT/Tickets_Overlay_SQL.pm:482
 msgid "No Query"
 msgstr "Aucune requête"
 
@@ -2751,7 +2788,7 @@
 msgid "No action"
 msgstr "Pas d'action"
 
-#: lib/RT/Record.pm:940
+#: lib/RT/Record.pm:947
 msgid "No column specified"
 msgstr "Aucune colonne spécifiée"
 
@@ -2772,7 +2809,7 @@
 msgid "No groups matching search criteria found."
 msgstr "Aucun groupe trouvé d'après le critère de recherche."
 
-#: lib/RT/Ticket_Overlay.pm:2350
+#: lib/RT/Ticket_Overlay.pm:2358
 msgid "No message attached"
 msgstr "Aucun messages attachés"
 
@@ -2801,7 +2838,7 @@
 msgid "No permission to view update ticket"
 msgstr "Pas de permission pour afficher le ticket mis à jour"
 
-#: lib/RT/Queue_Overlay.pm:796 lib/RT/Ticket_Overlay.pm:1451
+#: lib/RT/Queue_Overlay.pm:796 lib/RT/Ticket_Overlay.pm:1459
 msgid "No principal specified"
 msgstr "Aucun groupe/utilisateur spécifié"
 
@@ -2829,7 +2866,7 @@
 msgid "No search to operate on."
 msgstr "Pas de critère de recherche."
 
-#: html/Elements/RT__Ticket/ColumnMap:134
+#: html/Elements/RT__Ticket/ColumnMap:135 html/Search/Results.rdf:78
 msgid "No subject"
 msgstr "Pas de sujet"
 
@@ -2841,7 +2878,7 @@
 msgid "No users matching search criteria found."
 msgstr "Aucun utilisateur ne correspond aux critères de recherche."
 
-#: lib/RT/Record.pm:937
+#: lib/RT/Record.pm:944
 msgid "No value sent to _Set!\\n"
 msgstr "Pas de valeur à positionner !\\n"
 
@@ -2849,11 +2886,11 @@
 msgid "Nobody"
 msgstr "Personne"
 
-#: lib/RT/Record.pm:942
+#: lib/RT/Record.pm:949
 msgid "Nonexistant field?"
 msgstr "Champ inexistant?"
 
-#: html/Elements/Header:84
+#: html/Elements/Header:86
 msgid "Not logged in."
 msgstr "Non connecté."
 
@@ -2945,6 +2982,10 @@
 msgid "Nov."
 msgstr "Nov."
 
+#: html/CalPopup.html:47
+msgid "November"
+msgstr ""
+
 #: html/Search/Elements/SelectAndOr:47
 msgid "OR"
 msgstr "OU"
@@ -2979,6 +3020,10 @@
 msgid "Oct."
 msgstr "Oct."
 
+#: html/CalPopup.html:47
+msgid "October"
+msgstr ""
+
 #: html/Tools/Elements/Tabs:55
 msgid "Offline"
 msgstr "Déconnecté"
@@ -3048,7 +3093,7 @@
 
 #: html/Admin/CustomFields/index.html:75
 msgid "Only show custom fields for:"
-msgstr "Ne montrer que les champs personnalisés pour :"
+msgstr "Ne montrer que les champs personnalisés pour :"
 
 #: html/Ticket/Elements/Tabs:161
 msgid "Open it"
@@ -3066,7 +3111,7 @@
 msgid "Options"
 msgstr "Options"
 
-#: html/Search/Elements/DisplayOptions:56
+#: html/Search/Elements/DisplayOptions:59
 msgid "Order by"
 msgstr "Trier par"
 
@@ -3077,7 +3122,7 @@
 #: html/Approvals/Elements/Approve:53
 #. ($approving->Id, $approving->Subject)
 msgid "Originating ticket: #%1"
-msgstr "Ticket source : n°%1"
+msgstr "Ticket source : n°%1"
 
 #: lib/RT/Transaction_Overlay.pm:609
 msgid "Outgoing email about a comment recorded"
@@ -3099,7 +3144,7 @@
 msgid "OwnTicket"
 msgstr "PrendreTicket"
 
-#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/SelfService/Elements/MyRequests:51 html/Ticket/Create.html:70 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:82 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:111 lib/RT/Tickets_Overlay.pm:1810
+#: etc/initialdata:38 html/Elements/QuickCreate:56 html/Search/Elements/PickBasics:101 html/SelfService/Elements/MyRequests:51 html/Ticket/Create.html:70 html/Ticket/Elements/EditBasics:61 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/Reminders:82 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:111 lib/RT/Tickets_Overlay.pm:1958
 msgid "Owner"
 msgstr "Intervenant"
 
@@ -3125,7 +3170,7 @@
 msgid "Parents"
 msgstr "Parents"
 
-#: html/Elements/Login:97 html/User/Prefs.html:105
+#: html/Elements/Login:95 html/User/Prefs.html:105
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -3149,7 +3194,7 @@
 #: html/User/Prefs.html:232
 #. (loc_fuzzy($msg))
 msgid "Password: %1"
-msgstr "Mot de passe : %1"
+msgstr "Mot de passe : %1"
 
 #: lib/RT/User_Overlay.pm:1031
 msgid "Password: Permission Denied"
@@ -3175,7 +3220,7 @@
 msgid "Perl configuration"
 msgstr "Configuration de Perl"
 
-#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:117 lib/RT/CurrentUser.pm:126 lib/RT/CustomField_Overlay.pm:1015 lib/RT/CustomField_Overlay.pm:1136 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:402 lib/RT/CustomField_Overlay.pm:762 lib/RT/CustomField_Overlay.pm:935 lib/RT/CustomField_Overlay.pm:970 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1055 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:658 lib/RT/Queue_Overlay.pm:668 lib/RT/Queue_Overlay.pm:682 lib/RT/Queue_Overlay.pm:820 lib/RT/Queue_Overlay.pm:829 lib/RT/Queue_Overlay.pm:842 lib/RT/Scrip_Overlay.pm:150 lib/RT/Scrip_Overlay.pm:161 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:112 lib/RT/Template_Overlay.pm:118 lib/RT/Template_Overlay.pm:309 lib/RT/Ticket_Overlay.pm:1319 lib/RT/Ticket_Overlay.pm:1329 lib/RT/Ticket_Overlay.pm:1343 lib/RT/Ticket_Overlay.pm:1484 lib/RT/Ticket_Overlay.pm:1494 lib/RT/Ticket_Overlay.pm:1508 lib/RT/Ticket_Overlay.pm:1625 lib/RT/Ticket_Overlay.pm:1945 lib/RT/Ticket_Overlay.pm:2083 lib/RT/Ticket_Overlay.pm:2253 lib/RT/Ticket_Overlay.pm:2303 lib/RT/Ticket_Overlay.pm:2475 lib/RT/Ticket_Overlay.pm:2578 lib/RT/Ticket_Overlay.pm:2626 lib/RT/Ticket_Overlay.pm:2705 lib/RT/Ticket_Overlay.pm:2719 lib/RT/Ticket_Overlay.pm:2943 lib/RT/Ticket_Overlay.pm:2953 lib/RT/Ticket_Overlay.pm:2958 lib/RT/Ticket_Overlay.pm:3181 lib/RT/Ticket_Overlay.pm:3185 lib/RT/Ticket_Overlay.pm:3328 lib/RT/Ticket_Overlay.pm:3454 lib/RT/Transaction_Overlay.pm:503 lib/RT/Transaction_Overlay.pm:510 lib/RT/Transaction_Overlay.pm:538 lib/RT/Transaction_Overlay.pm:545 lib/RT/User_Overlay.pm:1184 lib/RT/User_Overlay.pm:1793 lib/RT/User_Overlay.pm:370 lib/RT/User_Overlay.pm:736 lib/RT/User_Overlay.pm:775
+#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm:405 lib/RT/Attribute_Overlay.pm:414 lib/RT/Attribute_Overlay.pm:427 lib/RT/CurrentUser.pm:117 lib/RT/CurrentUser.pm:126 lib/RT/CustomField_Overlay.pm:1015 lib/RT/CustomField_Overlay.pm:1136 lib/RT/CustomField_Overlay.pm:172 lib/RT/CustomField_Overlay.pm:189 lib/RT/CustomField_Overlay.pm:200 lib/RT/CustomField_Overlay.pm:374 lib/RT/CustomField_Overlay.pm:402 lib/RT/CustomField_Overlay.pm:762 lib/RT/CustomField_Overlay.pm:935 lib/RT/CustomField_Overlay.pm:970 lib/RT/Group_Overlay.pm:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1055 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:658 lib/RT/Queue_Overlay.pm:668 lib/RT/Queue_Overlay.pm:682 lib/RT/Queue_Overlay.pm:820 lib/RT/Queue_Overlay.pm:829 lib/RT/Queue_Overlay.pm:842 lib/RT/Scrip_Overlay.pm:150 lib/RT/Scrip_Overlay.pm:161 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:112 lib/RT/Template_Overlay.pm:118 lib/RT/Template_Overlay.pm:309 lib/RT/Ticket_Overlay.pm:1327 lib/RT/Ticket_Overlay.pm:1337 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1492 lib/RT/Ticket_Overlay.pm:1502 lib/RT/Ticket_Overlay.pm:1516 lib/RT/Ticket_Overlay.pm:1633 lib/RT/Ticket_Overlay.pm:1953 lib/RT/Ticket_Overlay.pm:2091 lib/RT/Ticket_Overlay.pm:2261 lib/RT/Ticket_Overlay.pm:2311 lib/RT/Ticket_Overlay.pm:2483 lib/RT/Ticket_Overlay.pm:2586 lib/RT/Ticket_Overlay.pm:2634 lib/RT/Ticket_Overlay.pm:2713 lib/RT/Ticket_Overlay.pm:2727 lib/RT/Ticket_Overlay.pm:2951 lib/RT/Ticket_Overlay.pm:2961 lib/RT/Ticket_Overlay.pm:2966 lib/RT/Ticket_Overlay.pm:3189 lib/RT/Ticket_Overlay.pm:3193 lib/RT/Ticket_Overlay.pm:3336 lib/RT/Ticket_Overlay.pm:3462 lib/RT/Transaction_Overlay.pm:503 lib/RT/Transaction_Overlay.pm:510 lib/RT/Transaction_Overlay.pm:538 lib/RT/Transaction_Overlay.pm:545 lib/RT/User_Overlay.pm:1184 lib/RT/User_Overlay.pm:1793 lib/RT/User_Overlay.pm:370 lib/RT/User_Overlay.pm:736 lib/RT/User_Overlay.pm:775
 msgid "Permission Denied"
 msgstr "Accès refusé"
 
@@ -3189,13 +3234,13 @@
 
 #: html/User/Elements/DelegateRights:58
 msgid "Personal groups:"
-msgstr "Groupes personnels:"
+msgstr "Groupes personnels :"
 
 #: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82
 msgid "Phone numbers"
 msgstr "Numéros de téléphone"
 
-#: html/Elements/Header:87 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:75 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: html/Elements/Header:89 html/Elements/Tabs:91 html/SelfService/Elements/Tabs:75 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
 msgid "Preferences"
 msgstr "Préférences"
 
@@ -3216,7 +3261,7 @@
 msgid "Principal %1 not found."
 msgstr "Personne/groupe %1 non trouvé(e)."
 
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:179 html/Ticket/Elements/EditBasics:87 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1594
+#: html/Search/Elements/PickBasics:148 html/Ticket/Create.html:179 html/Ticket/Elements/EditBasics:87 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1742
 msgid "Priority"
 msgstr "Priorité"
 
@@ -3226,7 +3271,7 @@
 
 #: html/Search/Elements/EditSearches:50
 msgid "Privacy:"
-msgstr "Privé:"
+msgstr "Confidentialité :"
 
 #: etc/initialdata:25
 msgid "Privileged"
@@ -3235,7 +3280,7 @@
 #: html/Admin/Users/Modify.html:331 html/User/Prefs.html:223
 #. (loc_fuzzy($msg))
 msgid "Privileged status: %1"
-msgstr "Statut privilégiés : %1"
+msgstr "Statut privilégiés :  %1"
 
 #: html/Admin/Users/index.html:102
 msgid "Privileged users"
@@ -3249,7 +3294,7 @@
 msgid "Query Builder"
 msgstr "Constructeur de requête"
 
-#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:60 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:40 html/Tools/Reports/ResolvedByDates.html:41 html/Tools/Reports/ResolvedByOwner.html:21 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1421
+#: html/Elements/QueueSummary:48 html/Elements/QuickCreate:54 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:60 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/Tools/Reports/CreatedByDates.html:40 html/Tools/Reports/ResolvedByDates.html:41 html/Tools/Reports/ResolvedByOwner.html:21 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1569
 msgid "Queue"
 msgstr "File"
 
@@ -3303,7 +3348,7 @@
 msgid "Quick ticket creation"
 msgstr "Création rapide de ticket"
 
-#: html/Search/Results.html:84
+#: html/Search/Results.html:81
 msgid "RSS"
 msgstr "RSS"
 
@@ -3332,7 +3377,7 @@
 msgid "RT couldn't store your session."
 msgstr "RT ne peut enregistrer votre session."
 
-#: html/Elements/Logo:49 html/Elements/PageLayout:178
+#: html/Elements/Logo:49 html/Elements/PageLayout:172
 #. ($RT::rtname)
 msgid "RT for %1"
 msgstr "RT pour %1"
@@ -3439,7 +3484,7 @@
 msgid "ReplyToTicket"
 msgstr "RépondreTicket"
 
-#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html:1 html/Tools/Reports/index.html:2
+#: html/Tools/Elements/Tabs:59 html/Tools/Reports/index.html.mine:1 html/Tools/Reports/index.html.mine:2 html/Tools/Reports/index.html:1 html/Tools/Reports/index.html:2
 msgid "Reports"
 msgstr "Rapports"
 
@@ -3559,15 +3604,19 @@
 msgid "Rows per box"
 msgstr "Lignes par boîte"
 
-#: html/Search/Elements/DisplayOptions:84
+#: html/Search/Elements/DisplayOptions:93
 msgid "Rows per page"
 msgstr "Lignes par pages"
 
+#: html/CalPopup.html:44
+msgid "Sat"
+msgstr ""
+
 #: lib/RT/Date.pm:418
 msgid "Sat."
 msgstr "Sam."
 
-#: html/Prefs/MyRT.html:64 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:70 html/Widgets/SelectionBox:212
+#: html/Prefs/MyRT.html:64 html/Prefs/Quicksearch.html:64 html/Prefs/Search.html:69 html/Prefs/Search.html:69 html/Search/Elements/EditSearches:68 html/Widgets/SelectionBox:212
 msgid "Save"
 msgstr "Sauver"
 
@@ -3663,7 +3712,7 @@
 
 #: bin/rt-crontool:213
 msgid "Security:"
-msgstr "Sécurité :"
+msgstr "Sécurité : "
 
 #: lib/RT/CustomField_Overlay.pm:105
 msgid "See custom fields"
@@ -3833,6 +3882,10 @@
 msgid "Sep."
 msgstr "Sep."
 
+#: html/CalPopup.html:47
+msgid "September"
+msgstr ""
+
 #: html/Ticket/Elements/ShowTransaction:158
 msgid "Show"
 msgstr "Afficher"
@@ -3929,7 +3982,7 @@
 msgid "Size"
 msgstr "Taille"
 
-#: html/Elements/Header:80
+#: html/Elements/Header:82
 msgid "Skip Menu"
 msgstr "Passer le menu"
 
@@ -3957,7 +4010,7 @@
 msgid "State"
 msgstr "Etat"
 
-#: html/Search/Elements/PickBasics:87 html/SelfService/Elements/MyRequests:50 html/SelfService/Update.html:57 html/Ticket/Create.html:64 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1143 lib/RT/Tickets_Overlay.pm:1454
+#: html/Search/Elements/PickBasics:87 html/SelfService/Elements/MyRequests:50 html/SelfService/Update.html:57 html/Ticket/Create.html:64 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1143 lib/RT/Tickets_Overlay.pm:1603
 msgid "Status"
 msgstr "Statut"
 
@@ -3986,7 +4039,7 @@
 msgid "Style"
 msgstr "Style"
 
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Elements/MyRequests:49 html/SelfService/Update.html:65 html/Ticket/Create.html:106 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:78 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:83 lib/RT/Ticket_Overlay.pm:1139 lib/RT/Tickets_Overlay.pm:1536
+#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:132 html/SelfService/Create.html:79 html/SelfService/Elements/MyRequests:49 html/SelfService/Update.html:65 html/Ticket/Create.html:106 html/Ticket/Elements/EditBasics:48 html/Ticket/Elements/Reminders:78 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:83 lib/RT/Ticket_Overlay.pm:1139 lib/RT/Tickets_Overlay.pm:1685
 msgid "Subject"
 msgstr "Sujet"
 
@@ -4003,6 +4056,10 @@
 msgid "Succeeded"
 msgstr "Réussi"
 
+#: html/CalPopup.html:43
+msgid "Sun"
+msgstr ""
+
 #: lib/RT/Date.pm:419
 msgid "Sun."
 msgstr "Dim."
@@ -4026,7 +4083,7 @@
 #: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221
 #. ($msg)
 msgid "System Error: %1"
-msgstr "Erreur système : %1"
+msgstr "Erreur système :  %1"
 
 #: html/Admin/Tools/index.html:47
 msgid "System Tools"
@@ -4093,7 +4150,7 @@
 msgid "Templates"
 msgstr "Modèles"
 
-#: lib/RT/CustomField_Overlay.pm:942 lib/RT/Record.pm:936
+#: lib/RT/CustomField_Overlay.pm:942 lib/RT/Record.pm:943
 msgid "That is already the current value"
 msgstr "Ceci est déjà la valeur actuelle"
 
@@ -4101,7 +4158,7 @@
 msgid "That is not a value for this custom field"
 msgstr "Valeur incorrecte pour ce champ personnalisé"
 
-#: lib/RT/Ticket_Overlay.pm:1956
+#: lib/RT/Ticket_Overlay.pm:1964
 msgid "That is the same value"
 msgstr "Valeur identique"
 
@@ -4114,7 +4171,7 @@
 msgid "That principal is already a %1 for this queue"
 msgstr "Ce groupe/utilisateur est déjà un %1 pour cette file"
 
-#: lib/RT/Ticket_Overlay.pm:1397
+#: lib/RT/Ticket_Overlay.pm:1405
 #. ($self->loc($args{'Type'}))
 msgid "That principal is already a %1 for this ticket"
 msgstr "Ce groupe/utilisateur est déjà un %1 pour ce ticket"
@@ -4124,19 +4181,19 @@
 msgid "That principal is not a %1 for this queue"
 msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette file"
 
-#: lib/RT/Ticket_Overlay.pm:1952
+#: lib/RT/Ticket_Overlay.pm:1960
 msgid "That queue does not exist"
 msgstr "File inconnue"
 
-#: lib/RT/Ticket_Overlay.pm:3190
+#: lib/RT/Ticket_Overlay.pm:3198
 msgid "That ticket has unresolved dependencies"
 msgstr "Ticket ayant des tickets fils ou dépendants non résolus"
 
-#: lib/RT/Ticket_Overlay.pm:2994
+#: lib/RT/Ticket_Overlay.pm:3002
 msgid "That user already owns that ticket"
 msgstr "Cet utilisateur possède déjà ce ticket"
 
-#: lib/RT/Ticket_Overlay.pm:2966
+#: lib/RT/Ticket_Overlay.pm:2974
 msgid "That user does not exist"
 msgstr "Utilisateur inconnu"
 
@@ -4156,7 +4213,7 @@
 msgid "That user is now unprivileged"
 msgstr "Cet utilisateur est maintenant non privilégié"
 
-#: lib/RT/Ticket_Overlay.pm:2987
+#: lib/RT/Ticket_Overlay.pm:2995
 msgid "That user may not own tickets in that queue"
 msgstr "Cet utilisateur ne peut pas posséder de ticket dans cette file"
 
@@ -4182,9 +4239,9 @@
 
 #: bin/rt-crontool:223
 msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:"
-msgstr "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures:"
+msgstr "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures :"
 
-#: lib/RT/Record.pm:939
+#: lib/RT/Record.pm:946
 msgid "The new value has been set."
 msgstr "La nouvelle valeur est enregistrée."
 
@@ -4229,6 +4286,10 @@
 msgid "This user's %1 highest priority tickets"
 msgstr "Les %1 tickets prioritaires de cet utilisateur"
 
+#: html/CalPopup.html:43
+msgid "Thu"
+msgstr ""
+
 #: lib/RT/Date.pm:416
 msgid "Thu."
 msgstr "Jeu."
@@ -4236,14 +4297,14 @@
 #: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
 #. ($Ticket->Id, $Ticket->Subject)
 msgid "Ticket #%1 Jumbo update: %2"
-msgstr "Ticket n°%1 mise à jour globale : %2"
+msgstr "Ticket n°%1 mise à jour globale : %2"
 
 #: html/Approvals/Elements/ShowDependency:67
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
 msgid "Ticket #%1: %2"
-msgstr "Ticket n°%1: %2"
+msgstr "Ticket n°%1 : %2"
 
-#: lib/RT/Action/CreateTickets.pm:1258 lib/RT/Action/CreateTickets.pm:1267 lib/RT/Action/CreateTickets.pm:595 lib/RT/Action/CreateTickets.pm:716 lib/RT/Action/CreateTickets.pm:729
+#: lib/RT/Action/CreateTickets.pm:1263 lib/RT/Action/CreateTickets.pm:1272 lib/RT/Action/CreateTickets.pm:595 lib/RT/Action/CreateTickets.pm:716 lib/RT/Action/CreateTickets.pm:729
 #. ($T::Tickets{$template_id}->Id)
 #. ($T::Tickets{$template_id}->id)
 #. ($ticket->Id)
@@ -4258,7 +4319,7 @@
 #: html/Search/Bulk.html:365
 #. ($Ticket->Id, $_)
 msgid "Ticket %1: %2"
-msgstr "Ticket %1 : %2"
+msgstr "Ticket %1 :  %2"
 
 #: html/Admin/Elements/QueueTabs:74
 msgid "Ticket Custom Fields"
@@ -4285,11 +4346,11 @@
 msgid "Ticket Transactions"
 msgstr "Transactions du ticket"
 
-#: lib/RT/Tickets_Overlay.pm:1724
+#: lib/RT/Tickets_Overlay.pm:1872
 msgid "Ticket content"
 msgstr "Contenu du ticket"
 
-#: lib/RT/Tickets_Overlay.pm:1773
+#: lib/RT/Tickets_Overlay.pm:1921
 msgid "Ticket content type"
 msgstr "Type du contenu du ticket"
 
@@ -4336,7 +4397,7 @@
 
 #: html/Approvals/Elements/ShowDependency:48
 msgid "Tickets which depend on this approval:"
-msgstr "Tickets dépendant de cette approbation:"
+msgstr "Tickets dépendant de cette approbation :"
 
 #: html/Search/Elements/PickBasics:134 html/Ticket/Create.html:181 html/Ticket/Elements/EditBasics:67
 msgid "Time Estimated"
@@ -4350,15 +4411,15 @@
 msgid "Time Worked"
 msgstr "Temps passé"
 
-#: lib/RT/Tickets_Overlay.pm:1695
+#: lib/RT/Tickets_Overlay.pm:1843
 msgid "Time left"
 msgstr "Temps restant"
 
-#: html/Elements/Footer:52
+#: html/Elements/Footer.mine:52 html/Elements/Footer.r3738:52 html/Elements/Footer.r3834:52 html/Elements/Footer:52
 msgid "Time to display"
 msgstr "Temps de calcul"
 
-#: lib/RT/Tickets_Overlay.pm:1670
+#: lib/RT/Tickets_Overlay.pm:1818
 msgid "Time worked"
 msgstr "Temps passé"
 
@@ -4370,7 +4431,7 @@
 msgid "Title"
 msgstr "Titre"
 
-#: html/Elements/Footer:64
+#: html/Elements/Footer.mine:64 html/Elements/Footer.r3738:68 html/Elements/Footer.r3834:63 html/Elements/Footer:70
 #. ('<a href="mailto:sales at bestpractical.com">sales at bestpractical.com</a>')
 msgid "To inquire about support, training, custom development or licensing, please contact %1."
 msgstr "Pour vous renseigner au sujet du support, de la formation, des développements spécifiques ou au sujet de la licence, merci de contacter en anglais %1."
@@ -4412,11 +4473,15 @@
 msgid "Transactions are immutable"
 msgstr "Les transactions ne peuvent être transférées"
 
+#: html/CalPopup.html:43
+msgid "Tue"
+msgstr ""
+
 #: lib/RT/Date.pm:414
 msgid "Tue."
 msgstr "Mar."
 
-#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1145 lib/RT/Tickets_Overlay.pm:1508
+#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1145 lib/RT/Tickets_Overlay.pm:1657
 msgid "Type"
 msgstr "Type"
 
@@ -4428,15 +4493,15 @@
 msgid "Unix login"
 msgstr "Identifiant Unix"
 
-#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:852
+#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:859
 #. ($self->ContentEncoding)
 #. ($ContentEncoding)
 msgid "Unknown ContentEncoding %1"
-msgstr "Type d'encodage de courrier inconnu: %1"
+msgstr "Type d'encodage de courrier inconnu : %1"
 
-#: html/Search/Build.html:610
+#: html/Search/Build.html:395
 msgid "Unknown field: $key"
-msgstr "Champ inconnu : $key"
+msgstr "Champ inconnu : $key"
 
 #: html/Elements/SelectResultsPerPage:58
 msgid "Unlimited"
@@ -4462,7 +4527,7 @@
 msgid "Untaken"
 msgstr "Non pris"
 
-#: html/Elements/RT__Ticket/ColumnMap:299 html/Search/Bulk.html:194 html/Search/Bulk.html:75
+#: html/Elements/RT__Ticket/ColumnMap:300 html/Search/Bulk.html:193 html/Search/Bulk.html:75
 msgid "Update"
 msgstr "Mettre à jour"
 
@@ -4474,7 +4539,7 @@
 msgid "Update Type"
 msgstr "Mettre à jour le type"
 
-#: html/Search/Bulk.html:200 html/Search/Results.html:81
+#: html/Search/Bulk.html:200 html/Search/Results.html:78
 msgid "Update multiple tickets"
 msgstr "Mettre à jour plusieurs tickets"
 
@@ -4565,7 +4630,7 @@
 #: html/Admin/Users/Modify.html:290
 #. ($msg)
 msgid "User could not be created: %1"
-msgstr "L'utilisateur ne peut être crééu : %1"
+msgstr "L'utilisateur ne peut être créé : %1"
 
 #: lib/RT/User_Overlay.pm:331
 msgid "User created"
@@ -4573,7 +4638,7 @@
 
 #: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
 msgid "User defined groups"
-msgstr "Groupes utilisateur"
+msgstr "Groupes définis par l'utilisateur"
 
 #: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613
 msgid "User loaded"
@@ -4583,7 +4648,7 @@
 msgid "User-defined groups"
 msgstr "Groupe définis par l'utilisateur"
 
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:92 html/Ticket/Elements/AddWatchers:56
+#: html/Admin/Users/Modify.html:69 html/Elements/Login:90 html/Ticket/Elements/AddWatchers:56
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
@@ -4595,7 +4660,7 @@
 msgid "Users matching search criteria"
 msgstr "Utilisateurs correspondants aux critères de recherche"
 
-#: lib/RT/Tickets_Overlay_SQL.pm:526
+#: lib/RT/Tickets_Overlay_SQL.pm:528
 msgid "Valid Query"
 msgstr "Valider la requête"
 
@@ -4619,6 +4684,10 @@
 msgid "Watchers"
 msgstr "Observateurs"
 
+#: html/CalPopup.html:43
+msgid "Wed"
+msgstr ""
+
 #: lib/RT/Date.pm:415
 msgid "Wed."
 msgstr "Mer."
@@ -4679,7 +4748,7 @@
 msgid "Work"
 msgstr "Travail"
 
-#: html/Search/Results.html:85
+#: html/Search/Results.html:82
 msgid "Work offline"
 msgstr "Travail hors ligne"
 
@@ -4687,11 +4756,11 @@
 msgid "Worked"
 msgstr "Travaillé"
 
-#: lib/RT/Ticket_Overlay.pm:3097
+#: lib/RT/Ticket_Overlay.pm:3105
 msgid "You already own this ticket"
 msgstr "Vous êtes déjà intervenant de ce ticket"
 
-#: html/autohandler:176 html/autohandler:184
+#: html/autohandler:181 html/autohandler:189
 msgid "You are not an authorized user"
 msgstr "Vous n'êtes pas un utilisateur autorisé"
 
@@ -4699,7 +4768,7 @@
 msgid "You can also edit the predefined search itself"
 msgstr "Vous pouvez aussi modifier la recherche prédéfinie elle-même"
 
-#: lib/RT/Ticket_Overlay.pm:2979
+#: lib/RT/Ticket_Overlay.pm:2987
 msgid "You can only reassign tickets that you own or that are unowned"
 msgstr "Vous pouvez seulement réaffecter vos ticket ou ceux qui ne sont pas affectés"
 
@@ -4716,7 +4785,7 @@
 msgid "You have no permission to create tickets in that queue."
 msgstr "Vous n'avez pas l'autorisation de créer des tickets dans cette file."
 
-#: lib/RT/Ticket_Overlay.pm:1965
+#: lib/RT/Ticket_Overlay.pm:1973
 msgid "You may not create requests in that queue."
 msgstr "Vous ne pouvez pas créer de demandes dans cette file."
 
@@ -4736,7 +4805,7 @@
 msgid "Your request was rejected."
 msgstr "Votre demande a été rejetée."
 
-#: html/autohandler:211
+#: html/autohandler:216
 msgid "Your username or password is incorrect"
 msgstr "Votre nom d'utilisateur ou votre mot de passe est incorrect"
 
@@ -4757,7 +4826,7 @@
 msgid "as granted to %1"
 msgstr "comme accordé à %1"
 
-#: html/Search/Results.html:86
+#: html/Search/Results.html:83
 msgid "chart"
 msgstr "graphique"
 
@@ -4789,29 +4858,29 @@
 msgid "equal to"
 msgstr "égal à"
 
-#: html/Search/Build.html:365
+#: html/Search/Build.html:563
 msgid "error: can't move down"
-msgstr "erreur : ne peut aller plus bas"
+msgstr "erreur : ne peut aller plus bas"
 
-#: html/Search/Build.html:387
+#: html/Search/Build.html:585
 msgid "error: can't move left"
-msgstr "erreur : ne peut aller à gauche"
+msgstr "erreur : ne peut aller à gauche"
 
-#: html/Search/Build.html:346
+#: html/Search/Build.html:544
 msgid "error: can't move up"
-msgstr "erreur : ne peut aller plus haut"
+msgstr "erreur : ne peut aller plus haut"
 
-#: html/Search/Build.html:429
+#: html/Search/Build.html:627
 msgid "error: nothing to delete"
-msgstr "erreur : rien à effacer"
+msgstr "erreur : rien à effacer"
 
-#: html/Search/Build.html:351 html/Search/Build.html:370 html/Search/Build.html:392 html/Search/Build.html:421
+#: html/Search/Build.html:549 html/Search/Build.html:568 html/Search/Build.html:590 html/Search/Build.html:619
 msgid "error: nothing to move"
-msgstr "erreur : rien à déplacer"
+msgstr "erreur : rien à déplacer"
 
-#: html/Search/Build.html:447
+#: html/Search/Build.html:645
 msgid "error: nothing to toggle"
-msgstr "erreur : rien à commuter"
+msgstr "erreur : rien à commuter"
 
 #: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
 msgid "greater than"
@@ -4822,7 +4891,7 @@
 msgid "group '%1'"
 msgstr "groupe '%1'"
 
-#: html/Search/Results.html:92
+#: html/Search/Results.html:88
 #. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy'))
 msgid "grouped by %1"
 msgstr "groupés par %1"
@@ -4835,11 +4904,11 @@
 msgid "id"
 msgstr "n°"
 
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:162 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
+#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:74 html/Search/Elements/PickBasics:90 html/Search/Elements/PickCFs:53
 msgid "is"
 msgstr "est"
 
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:163 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
+#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:164 html/Search/Elements/PickBasics:75 html/Search/Elements/PickBasics:91 html/Search/Elements/PickCFs:54
 msgid "isn't"
 msgstr "n'est pas"
 
@@ -4869,7 +4938,7 @@
 
 #: html/Admin/Elements/EditScrips:64
 msgid "no value"
-msgstr "Non renseigné"
+msgstr "non renseigné"
 
 #: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
 msgid "none"
@@ -4909,18 +4978,18 @@
 msgid "show Configuration tab"
 msgstr "montrer l'onglet de configuration"
 
-#: html/Search/Results.html:83
+#: html/Search/Results.html:80
 msgid "spreadsheet"
 msgstr "feuille de calcul"
 
 #: lib/RT/Queue_Overlay.pm:85
 msgid "stalled"
-msgstr "bloqué"
+msgstr "stagnant"
 
-#: html/Search/Results.html:93
+#: html/Search/Results.html:89
 #. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
 msgid "style: %1"
-msgstr "style : %1"
+msgstr "style : %1"
 
 #: html/Prefs/MyRT.html:80
 msgid "summary rows"
@@ -4948,7 +5017,7 @@
 #: lib/RT/Group_Overlay.pm:236
 #. ($self->Id)
 msgid "undescribed group %1"
-msgstr "Groupe %1 non décrit"
+msgstr "groupe %1 non décrit"
 
 #: lib/RT/Group_Overlay.pm:211
 #. ($user->Object->Name)

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/he.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/he.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/he.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "PO-Revision-Date: 2005-10-03 13:47-0400\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/hu.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/hu.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/hu.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-06-22 06:06+0200\n"
 "PO-Revision-Date: 2005-10-03 13:48-0400\n"
 "Last-Translator: Attila K. Mergl <mergl at astron.hu>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/id.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/id.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/id.po	Tue Nov 22 00:41:39 2005
@@ -2,7 +2,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: \n"
 "PO-Revision-Date: 2005-10-03 13:48-0400\n"
 "Last-Translator: James <james at actionmessage.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/it.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/it.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/it.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
 "PO-Revision-Date: 2005-10-03 13:48-0400\n"
 "Last-Translator: Angelo Turetta <aturetta at bestunion.it>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ja.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ja.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ja.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
 "PO-Revision-Date: 2005-10-03 13:49-0400\n"
 "Last-Translator: Jesse Vincent <jesse at bestpractical.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/nl.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/nl.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/nl.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "PO-Revision-Date: 2005-10-03 13:50-0400\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/no.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/no.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/no.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2003-04-01 06:06+0200\n"
 "PO-Revision-Date: 2005-10-03 13:50-0400\n"
 "Last-Translator: Ronny Pettersen <ronny.pettersen at edb.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pl.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pl.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pl.po	Tue Nov 22 00:41:39 2005
@@ -2,9 +2,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2007-01-18 11:36+0800\n"
-"PO-Revision-Date: 2005-10-03 13:51-0400\n"
+"PO-Revision-Date: 2005-10-03 14:26-0400\n"
 "Last-Translator: Piotr Śliwa <piotr.sliwa at comarch.pl>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"
 "MIME-Version: 1.0\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pt_br.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pt_br.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/pt_br.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 # $Id: pt_br.po,v 1.3 2002/08/20 20:15:45 gustavo Exp $
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "POT-Creation-Date: 2002-05-02 11:36+0800\n"
 "PO-Revision-Date: 2005-10-03 13:51-0400\n"
 "Last-Translator: Gustavo Chaves <gustavo at cpqd.com.br>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ru.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ru.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/ru.po	Tue Nov 22 00:41:39 2005
@@ -9,7 +9,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.9.1\n"
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "MIME-Version: 1.0\n"
 
 #: NOT FOUND IN SOURCE

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_cn.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_cn.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_cn.po	Tue Nov 22 00:41:39 2005
@@ -1,8 +1,8 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
+"Project-Id-Version: RT 3.5.x\n"
+"PO-Revision-Date: 2005-10-03 14:28-0400\n"
 "Last-Translator: Autrijus Tang <autrijus at autrijus.org>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"
 "MIME-Version: 1.0\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_tw.po
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_tw.po	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/I18N/zh_tw.po	Tue Nov 22 00:41:39 2005
@@ -1,7 +1,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.x\n"
+"Project-Id-Version: RT 3.5.x\n"
 "PO-Revision-Date: 2005-10-03 13:54-0400\n"
 "Last-Translator: Autrijus Tang <autrijus at autrijus.org>\n"
 "Language-Team: rt-devel <rt-devel at lists.fsck.com>\n"

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web.pm
==============================================================================

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Ticket_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Ticket_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Ticket_Overlay.pm	Tue Nov 22 00:41:39 2005
@@ -3483,7 +3483,7 @@
     
         #If we can't actually set the field to the value, don't record
         # a transaction. instead, get out of here.
-        if ( $ret == 0 ) { return ( 0, $msg ); }
+        return ( 0, $msg ) unless $ret;
     }
 
     if ( $args{'RecordTransaction'} == 1 ) {
@@ -3719,13 +3719,17 @@
 sub CustomFieldValues {
     my $self  = shift;
     my $field = shift;
-    unless ( $field =~ /^\d+$/ ) {
+    if ( $field and $field !~ /^\d+$/ ) {
         my $cf = RT::CustomField->new( $self->CurrentUser );
         $cf->LoadByNameAndQueue( Name => $field, Queue => $self->QueueObj->Id );
         unless ( $cf->id ) {
             $cf->LoadByNameAndQueue( Name => $field, Queue => '0' );
         }
         $field = $cf->id;
+        unless ( $field =~ /^\d+$/ ) {
+          # If we didn't find a valid cfid, give up.
+          return RT::CustomFieldValues->new($self->CurrentUser);
+        }
     }
     return $self->SUPER::CustomFieldValues($field);
 }

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay.pm	Tue Nov 22 00:41:39 2005
@@ -1,38 +1,38 @@
 # BEGIN BPS TAGGED BLOCK {{{
-# 
+#
 # COPYRIGHT:
-#  
-# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC 
+#
+# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC
 #                                          <jesse at bestpractical.com>
-# 
+#
 # (Except where explicitly superseded by other copyright notices)
-# 
-# 
+#
+#
 # LICENSE:
-# 
+#
 # This work is made available to you under the terms of Version 2 of
 # the GNU General Public License. A copy of that license should have
 # been provided with this software, but in any event can be snarfed
 # from www.gnu.org.
-# 
+#
 # This work is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 # General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-# 
-# 
+#
+#
 # CONTRIBUTION SUBMISSION POLICY:
-# 
+#
 # (The following paragraph is not intended to limit the rights granted
 # to you to modify and distribute this software under the terms of
 # the GNU General Public License and is only of importance to you if
 # you choose to contribute your changes and enhancements to the
 # community by submitting them to Best Practical Solutions, LLC.)
-# 
+#
 # By intentionally submitting any modifications, corrections or
 # derivatives to this work, or any other work intended for use with
 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
@@ -41,7 +41,7 @@
 # royalty-free, perpetual, license to use, copy, create derivative
 # works based on those contributions, and sublicense and distribute
 # those contributions and any derivatives thereof.
-# 
+#
 # END BPS TAGGED BLOCK }}}
 # Major Changes:
 
@@ -99,46 +99,45 @@
 # metadata.
 
 my %FIELD_METADATA = (
-    Status           => [ 'ENUM', ],
-    Queue            => [ 'ENUM' => 'Queue', ],
-    Type             => [ 'ENUM', ],
-    Creator          => [ 'ENUM' => 'User', ],
-    LastUpdatedBy    => [ 'ENUM' => 'User', ],
-    Owner            => [ 'ENUM' => 'User', ],
-    EffectiveId      => [ 'INT', ],
-    id               => [ 'INT', ],
-    InitialPriority  => [ 'INT', ],
-    FinalPriority    => [ 'INT', ],
-    Priority         => [ 'INT', ],
-    TimeLeft         => [ 'INT', ],
-    TimeWorked       => [ 'INT', ],
-    MemberOf         => [ 'LINK' => To => 'MemberOf', ],
-    DependsOn        => [ 'LINK' => To => 'DependsOn', ],
-    RefersTo         => [ 'LINK' => To => 'RefersTo', ],
-    HasMember        => [ 'LINK' => From => 'MemberOf', ],
-    DependentOn      => [ 'LINK' => From => 'DependsOn', ],
-    DependedOnBy     => [ 'LINK' => From => 'DependsOn', ],
-    ReferredToBy     => [ 'LINK' => From => 'RefersTo', ],
-    Told             => [ 'DATE' => 'Told', ],
-    Starts           => [ 'DATE' => 'Starts', ],
-    Started          => [ 'DATE' => 'Started', ],
-    Due              => [ 'DATE' => 'Due', ],
-    Resolved         => [ 'DATE' => 'Resolved', ],
-    LastUpdated      => [ 'DATE' => 'LastUpdated', ],
-    Created          => [ 'DATE' => 'Created', ],
+    Status          => [ 'ENUM', ],
+    Queue           => [ 'ENUM' => 'Queue', ],
+    Type            => [ 'ENUM', ],
+    Creator         => [ 'ENUM' => 'User', ],
+    LastUpdatedBy   => [ 'ENUM' => 'User', ],
+    Owner           => [ 'WATCHERFIELD' => 'Owner', ],
+    EffectiveId     => [ 'INT', ],
+    id              => [ 'INT', ],
+    InitialPriority => [ 'INT', ],
+    FinalPriority   => [ 'INT', ],
+    Priority        => [ 'INT', ],
+    TimeLeft        => [ 'INT', ],
+    TimeWorked      => [ 'INT', ],
+    MemberOf        => [ 'LINK' => To => 'MemberOf', ],
+    DependsOn       => [ 'LINK' => To => 'DependsOn', ],
+    RefersTo        => [ 'LINK' => To => 'RefersTo', ],
+    HasMember       => [ 'LINK' => From => 'MemberOf', ],
+    DependentOn     => [ 'LINK' => From => 'DependsOn', ],
+    DependedOnBy    => [ 'LINK' => From => 'DependsOn', ],
+    ReferredToBy    => [ 'LINK' => From => 'RefersTo', ],
+    Told             => [ 'DATE'            => 'Told', ],
+    Starts           => [ 'DATE'            => 'Starts', ],
+    Started          => [ 'DATE'            => 'Started', ],
+    Due              => [ 'DATE'            => 'Due', ],
+    Resolved         => [ 'DATE'            => 'Resolved', ],
+    LastUpdated      => [ 'DATE'            => 'LastUpdated', ],
+    Created          => [ 'DATE'            => 'Created', ],
     Subject          => [ 'STRING', ],
-    Content	     => [ 'TRANSFIELD', ],
+    Content          => [ 'TRANSFIELD', ],
     ContentType      => [ 'TRANSFIELD', ],
     Filename         => [ 'TRANSFIELD', ],
     TransactionDate  => [ 'TRANSDATE', ],
-    Requestor        => [ 'WATCHERFIELD' => 'Requestor', ],
-    Requestors       => [ 'WATCHERFIELD' => 'Requestor', ],
-    Cc               => [ 'WATCHERFIELD' => 'Cc', ],
-    AdminCc          => [ 'WATCHERFIELD' => 'AdminCc', ],
-    Watcher	     => [ 'WATCHERFIELD', ],
-    LinkedTo	     => [ 'LINKFIELD', ],
+    Requestor        => [ 'WATCHERFIELD'    => 'Requestor', ],
+    Requestors       => [ 'WATCHERFIELD'    => 'Requestor', ],
+    Cc               => [ 'WATCHERFIELD'    => 'Cc', ],
+    AdminCc          => [ 'WATCHERFIELD'    => 'AdminCc', ],
+    Watcher          => ['WATCHERFIELD'],
+    LinkedTo         => [ 'LINKFIELD', ],
     CustomFieldValue => [ 'CUSTOMFIELD', ],
-    CustomField      => [ 'CUSTOMFIELD', ],
     CF               => [ 'CUSTOMFIELD', ],
     Updated          => [ 'TRANSDATE', ],
     RequestorGroup   => [ 'MEMBERSHIPFIELD' => 'Requestor', ],
@@ -161,7 +160,7 @@
     LINKFIELD       => \&_LinkFieldLimit,
     CUSTOMFIELD     => \&_CustomFieldLimit,
 );
-my %can_bundle = ( WATCHERFIELD => "yeps", );
+my %can_bundle = ( WATCHERFIELD => "yes", );
 
 # Default EntryAggregator per type
 # if you specify OP, you must specify all valid OPs
@@ -212,10 +211,10 @@
 # {{{ sub SortFields
 
 @SORTFIELDS = qw(id Status
-  Queue Subject
-  Owner Created Due Starts Started
-  Told
-  Resolved LastUpdated Priority TimeWorked TimeLeft);
+    Queue Subject
+    Owner Created Due Starts Started
+    Told
+    Resolved LastUpdated Priority TimeWorked TimeLeft);
 
 =head2 SortFields
 
@@ -270,7 +269,8 @@
     $op = "!=" if $op eq "<>";
 
     die "Invalid Operation: $op for $field"
-      unless $op eq "=" or $op eq "!=";
+        unless $op eq "="
+        or $op     eq "!=";
 
     my $meta = $FIELD_METADATA{$field};
     if ( defined $meta->[1] ) {
@@ -301,7 +301,7 @@
     my ( $sb, $field, $op, $value, @rest ) = @_;
 
     die "Invalid Operator $op for $field"
-      unless $op =~ /^(=|!=|>|<|>=|<=)$/;
+        unless $op =~ /^(=|!=|>|<|>=|<=)$/;
 
     $sb->_SQLLimit(
         FIELD    => $field,
@@ -328,7 +328,7 @@
     die "Invalid Operator $op for $field" unless $op =~ /^(=|!=|IS)/io;
 
     die "Incorrect Metadata for $field"
-      unless ( defined $meta->[1] and defined $meta->[2] );
+        unless ( defined $meta->[1] and defined $meta->[2] );
 
     my $direction = $meta->[1];
 
@@ -390,17 +390,17 @@
         $sb->_SQLLimit(
             ALIAS           => $linkalias,
             ENTRYAGGREGATOR => 'AND',
-            FIELD           => ( $is_local ? "Local$matchfield" : $matchfield ),
-            OPERATOR        => 'IS',
-            VALUE           => 'NULL',
-            QUOTEVALUE      => '0',
+            FIELD      => ( $is_local ? "Local$matchfield" : $matchfield ),
+            OPERATOR   => 'IS',
+            VALUE      => 'NULL',
+            QUOTEVALUE => '0',
         );
 
     }
     else {
 
         $sb->{_sql_linkalias} = $sb->NewAlias('Links')
-          unless defined $sb->{_sql_linkalias};
+            unless defined $sb->{_sql_linkalias};
 
         $sb->_OpenParen();
 
@@ -415,9 +415,9 @@
         $sb->_SQLLimit(
             ALIAS           => $sb->{_sql_linkalias},
             ENTRYAGGREGATOR => 'AND',
-            FIELD           => ( $is_local ? "Local$matchfield" : $matchfield ),
-            OPERATOR        => '=',
-            VALUE           => $value,
+            FIELD    => ( $is_local ? "Local$matchfield" : $matchfield ),
+            OPERATOR => '=',
+            VALUE    => $value,
         );
 
         #If we're searching on target, join the base to ticket.id
@@ -445,23 +445,17 @@
     my ( $sb, $field, $op, $value, @rest ) = @_;
 
     die "Invalid Date Op: $op"
-      unless $op =~ /^(=|>|<|>=|<=)$/;
+        unless $op =~ /^(=|>|<|>=|<=)$/;
 
     my $meta = $FIELD_METADATA{$field};
     die "Incorrect Meta Data for $field"
-      unless ( defined $meta->[1] );
+        unless ( defined $meta->[1] );
 
-    require Time::ParseDate;
     use POSIX 'strftime';
 
-    # XXX TODO FIXME: Replace me with RT::Date( Type => 'unknown' ...)
-    my $time =  Time::ParseDate::parsedate(
-        $value,
-        UK            => $RT::DateDayBeforeMonth,
-        PREFER_PAST   => $RT::AmbiguousDayInPast,
-        PREFER_FUTURE => !($RT::AmbiguousDayInPast),
-        FUZZY         => 1
-    );
+    my $date = RT::Date->new( $sb->CurrentUser );
+    $date->Set( Format => 'unknown', Value => $value );
+    my $time = $date->Unix;
 
     if ( $op eq "=" ) {
 
@@ -469,8 +463,8 @@
         # particular single day.  in the database, we need to check for >
         # and < the edges of that day.
 
-        my $daystart =
-          strftime( "%Y-%m-%d %H:%M", gmtime( $time - ( $time % 86400 ) ) );
+        my $daystart = strftime( "%Y-%m-%d %H:%M",
+            gmtime( $time - ( $time % 86400 ) ) );
         my $dayend = strftime( "%Y-%m-%d %H:%M",
             gmtime( $time + ( 86399 - $time % 86400 ) ) );
 
@@ -548,28 +542,67 @@
     # See the comments for TransLimit, they apply here too
 
     $sb->{_sql_transalias} = $sb->NewAlias('Transactions')
-      unless defined $sb->{_sql_transalias};
+        unless defined $sb->{_sql_transalias};
     $sb->{_sql_trattachalias} = $sb->NewAlias('Attachments')
-      unless defined $sb->{_sql_trattachalias};
+        unless defined $sb->{_sql_trattachalias};
+
+    my $date = RT::Date->new( $sb->CurrentUser );
+    $date->Set( Format => 'unknown', Value => $value );
+    my $time = $date->Unix;
 
-    # Join Transactions To Attachments
     $sb->_OpenParen;
+    if ( $op eq "=" ) {
 
-    #Search for the right field
-    $sb->_SQLLimit(
-        ALIAS         => $sb->{_sql_trattachalias},
-        FIELD         => 'Created',
-        OPERATOR      => $op,
-        VALUE         => $value,
-        CASESENSITIVE => 0,
-        @rest
-    );
+        # if we're specifying =, that means we want everything on a
+        # particular single day.  in the database, we need to check for >
+        # and < the edges of that day.
+
+        my $daystart = strftime( "%Y-%m-%d %H:%M",
+            gmtime( $time - ( $time % 86400 ) ) );
+        my $dayend = strftime( "%Y-%m-%d %H:%M",
+            gmtime( $time + ( 86399 - $time % 86400 ) ) );
+
+        $sb->_SQLLimit(
+            ALIAS         => $sb->{_sql_transalias},
+            FIELD         => 'Created',
+            OPERATOR      => ">=",
+            VALUE         => $daystart,
+            CASESENSITIVE => 0,
+            @rest
+        );
+        $sb->_SQLLimit(
+            ALIAS         => $sb->{_sql_transalias},
+            FIELD         => 'Created',
+            OPERATOR      => "<=",
+            VALUE         => $dayend,
+            CASESENSITIVE => 0,
+            @rest,
+            ENTRYAGGREGATOR => 'AND',
+        );
+
+    }
+
+    # not searching for a single day
+    else {
+
+        #Search for the right field
+        $sb->_SQLLimit(
+            ALIAS         => $sb->{_sql_transalias},
+            FIELD         => 'Created',
+            OPERATOR      => $op,
+            VALUE         => $value,
+            CASESENSITIVE => 0,
+            @rest
+        );
+    }
+
+    # Join Transactions To Attachments
 
     $sb->_SQLJoin(
         ALIAS1 => $sb->{_sql_trattachalias},
         FIELD1 => 'TransactionId',
-        ALIAS2 => $sb->{_transalias},
-        FIELD2 => 'id'
+        ALIAS2 => $sb->{_sql_transalias},
+        FIELD2 => 'id',
     );
 
     # Join Transactions to Tickets
@@ -586,10 +619,6 @@
         VALUE => 'RT::Ticket'
     );
 
-    my $d = new RT::Date( $sb->CurrentUser );
-    $d->Set( Format => 'ISO', Value => $value );
-    $value = $d->ISO;
-
     $sb->_CloseParen;
 }
 
@@ -639,9 +668,9 @@
     my ( $self, $field, $op, $value, @rest ) = @_;
 
     $self->{_sql_transalias} = $self->NewAlias('Transactions')
-      unless defined $self->{_sql_transalias};
+        unless defined $self->{_sql_transalias};
     $self->{_sql_trattachalias} = $self->NewAlias('Attachments')
-      unless defined $self->{_sql_trattachalias};
+        unless defined $self->{_sql_trattachalias};
 
     $self->_OpenParen;
 
@@ -764,8 +793,6 @@
     my $value = shift;
     my %rest  = (@_);
 
-    $self->_OpenParen;
-
     # Find out what sort of watcher we're looking for
     my $fieldname;
     if ( ref $field ) {
@@ -773,41 +800,71 @@
     }
     else {
         $fieldname = $field;
+        $field = [ [ $field, $op, $value, %rest ] ];    # gross hack
     }
     my $meta = $FIELD_METADATA{$fieldname};
     my $type = ( defined $meta->[1] ? $meta->[1] : undef );
 
+    # Owner was ENUM field, so "Owner = 'xxx'" allowed user to
+    # search by id and Name at the same time, this is workaround
+    # to preserve backward compatibility
+    if ( $fieldname eq 'Owner' ) {
+        my $flag = 0;
+        for my $chunk ( splice @$field ) {
+            my ( $f, $op, $value, %rest ) = @$chunk;
+            if ( !$rest{SUBKEY} && $op =~ /^!?=$/ ) {
+                $self->_OpenParen unless $flag++;
+                my $o = RT::User->new( $self->CurrentUser );
+                $o->Load($value);
+                $value = $o->Id;
+                $self->_SQLLimit(
+                    FIELD    => 'Owner',
+                    OPERATOR => $op,
+                    VALUE    => $value,
+                    %rest,
+                );
+            }
+            else {
+                push @$field, $chunk;
+            }
+        }
+        $self->_CloseParen if $flag;
+        return unless @$field;
+    }
+
     my $users = $self->_WatcherJoin($type);
 
     # If we're looking for multiple watchers of a given type,
     # TicketSQL will be handing it to us as an array of clauses in
     # $field
-    if ( ref $field ) {    # gross hack
-        $self->_OpenParen;
-        for my $chunk (@$field) {
-            ( $field, $op, $value, %rest ) = @$chunk;
-            $self->_SQLLimit(
-                ALIAS         => $users,
-                FIELD         => $rest{SUBKEY} || 'EmailAddress',
-                VALUE         => $value,
-                OPERATOR      => $op,
-                CASESENSITIVE => 0,
-                %rest
-            );
-        }
-        $self->_CloseParen;
-    }
-    else {
+    $self->_OpenParen;
+    for my $chunk (@$field) {
+        ( $field, $op, $value, %rest ) = @$chunk;
+        $rest{SUBKEY} ||= 'EmailAddress';
+
+        my $re_negative_op = qr[!=|NOT LIKE];
+        $self->_OpenParen if $op =~ /$re_negative_op/;
+
         $self->_SQLLimit(
             ALIAS         => $users,
-            FIELD         => $rest{SUBKEY} || 'EmailAddress',
+            FIELD         => $rest{SUBKEY},
             VALUE         => $value,
             OPERATOR      => $op,
             CASESENSITIVE => 0,
             %rest
         );
-    }
 
+        if ( $op =~ /$re_negative_op/ ) {
+            $self->_SQLLimit(
+                ALIAS           => $users,
+                FIELD           => $rest{SUBKEY},
+                OPERATOR        => 'IS',
+                VALUE           => 'NULL',
+                ENTRYAGGREGATOR => 'OR',
+            );
+            $self->_CloseParen;
+        }
+    }
     $self->_CloseParen;
 }
 
@@ -819,45 +876,75 @@
 =cut
 
 sub _WatcherJoin {
-    my $self  = shift;
-    my $type  = shift;
-    my $key   = shift || "limit";
+    my $self = shift;
+    my $type = shift;
 
+    # we cache joins chain per watcher type
+    # if we limit by requestor then we shouldn't join requestors again
+    # for sort or limit on other requestors
+    if ( $self->{'_watcher_join_users_alias'}{ $type || 'any' } ) {
+        return $self->{'_watcher_join_users_alias'}{ $type || 'any' };
+    }
+
+# we always have watcher groups for ticket
+# this join should be NORMAL
+# XXX: if we change this from Join to NewAlias+Limit
+# then Pg will complain because SB build wrong query.
+# Query looks like "FROM (Tickets LEFT JOIN CGM ON(Groups.id = CGM.GroupId)), Groups"
+# Pg doesn't like that fact that it doesn't know about Groups table yet when
+# join CGM table into Tickets. Problem is in Join method which doesn't use
+# ALIAS1 argument when build braces.
     my $groups = $self->Join(
-        TYPE   => 'left',
-        ALIAS1 => 'main',
-        FIELD1 => 'id',
-        TABLE2 => 'Groups',
-        FIELD2 => 'Instance'
+        ALIAS1          => 'main',
+        FIELD1          => 'id',
+        TABLE2          => 'Groups',
+        FIELD2          => 'Instance',
+        ENTRYAGGREGATOR => 'AND'
+    );
+    $self->SUPER::Limit(
+        ALIAS           => $groups,
+        FIELD           => 'Domain',
+        VALUE           => 'RT::Ticket-Role',
+        ENTRYAGGREGATOR => 'AND'
     );
+    $self->SUPER::Limit(
+        ALIAS           => $groups,
+        FIELD           => 'Type',
+        VALUE           => $type,
+        ENTRYAGGREGATOR => 'AND'
+        )
+        if ($type);
+
     my $groupmembers = $self->Join(
-        TYPE   => 'left',
+        TYPE   => 'LEFT',
         ALIAS1 => $groups,
         FIELD1 => 'id',
         TABLE2 => 'CachedGroupMembers',
         FIELD2 => 'GroupId'
     );
+
+    # XXX: work around, we must hide groups that
+    # are members of the role group we search in,
+    # otherwise them result in wrong NULLs in Users
+    # table and break ordering. Now, we know that
+    # RT doesn't allow to add groups as members of the
+    # ticket roles, so we just hide entries in CGM table
+    # with MemberId == GroupId from results
+    my $groupmembers = $self->SUPER::Limit(
+        LEFTJOIN   => $groupmembers,
+        FIELD      => 'GroupId',
+        OPERATOR   => '!=',
+        VALUE      => "$groupmembers.MemberId",
+        QUOTEVALUE => 0,
+    );
     my $users = $self->Join(
-        TYPE   => 'left',
+        TYPE   => 'LEFT',
         ALIAS1 => $groupmembers,
         FIELD1 => 'MemberId',
         TABLE2 => 'Users',
         FIELD2 => 'id'
     );
-    $self->SUPER::Limit(
-        ALIAS           => $groups,
-        FIELD           => 'Domain',
-        VALUE           => 'RT::Ticket-Role',
-        ENTRYAGGREGATOR => 'AND'
-    );
-    $self->SUPER::Limit(
-        ALIAS           => $groups,
-        FIELD           => 'Type',
-        VALUE           => $type,
-        ENTRYAGGREGATOR => 'AND'
-      )
-      if ($type);
-    return $users;
+    return $self->{'_watcher_join_users_alias'}{ $type || 'any' } = $users;
 }
 
 =head2 _WatcherMembershipLimit
@@ -1067,29 +1154,30 @@
 }
 
 
-=head2 _CustomFieldDecipher
 
+=head2 _CustomFieldDecipher
+ 
 Try and turn a CF descriptor into (cfid, cfname) object pair.
+ 
 
 =cut
 
 sub _CustomFieldDecipher {
   my ($self, $field) = @_;
-
+ 
   my $queue = 0;
-
   if ( $field =~ /^(.+?)\.{(.+)}$/ ) {
     $queue = $1;
     $field = $2;
-  }
+ }
   $field = $1 if $field =~ /^{(.+)}$/;    # trim { }
-
+ 
   my $cfid;
-
+ 
   if ($queue) {
     my $q = RT::Queue->new( $self->CurrentUser );
     $q->Load($queue) if ($queue);
-
+ 
     my $cf;
     if ( $q->id ) {
       # $queue = $q->Name; # should we normalize the queue?
@@ -1098,26 +1186,29 @@
     else {
       $cf = RT::CustomField->new( $self->CurrentUser );
       $cf->LoadByNameAndQueue( Queue => '0', Name => $field );
-    }
+     }
     $cfid = $cf->id if $cf;
   }
-
+ 
   return ($queue, $field, $cfid);
-
+ 
 }
+ 
 
-
+ 
 =head2 _CustomFieldJoin
-
+ 
 Factor out the Join of custom fields so we can use it for sorting too
 
 =cut
 
 sub _CustomFieldJoin {
   my ($self, $cfkey, $cfid, $field) = @_;
-
+ 
   my $TicketCFs;
+
     # Perform one Join per CustomField
+
     if ( $self->{_sql_object_cf_alias}{$cfkey} ) {
         $TicketCFs = $self->{_sql_object_cf_alias}{$cfkey};
     }
@@ -1136,12 +1227,13 @@
                 VALUE           => $cfid,
                 ENTRYAGGREGATOR => 'AND'
             );
-        } else {
+        }
+        else {
             my $cfalias = $self->Join(
-                TYPE   => 'left',
-                EXPRESSION =>   "'$field'",
-                TABLE2 => 'CustomFields',
-                FIELD2 => 'Name',
+                TYPE       => 'left',
+                EXPRESSION => "'$field'",
+                TABLE2     => 'CustomFields',
+                FIELD2     => 'Name',
             );
 
             $TicketCFs = $self->{_sql_object_cf_alias}{$cfkey} = $self->Join(
@@ -1152,28 +1244,28 @@
                 FIELD2 => 'CustomField',
             );
             $self->SUPER::Limit(
-                LEFTJOIN => $TicketCFs,
-                FIELD => 'ObjectId',
-                VALUE => 'main.id',
-                QUOTEVALUE => 0,
+                LEFTJOIN        => $TicketCFs,
+                FIELD           => 'ObjectId',
+                VALUE           => 'main.id',
+                QUOTEVALUE      => 0,
                 ENTRYAGGREGATOR => 'AND',
             );
         }
         $self->SUPER::Limit(
-            LEFTJOIN => $TicketCFs,
-            FIELD    => 'ObjectType',
-            VALUE    => 'RT::Ticket',
+            LEFTJOIN        => $TicketCFs,
+            FIELD           => 'ObjectType',
+            VALUE           => 'RT::Ticket',
             ENTRYAGGREGATOR => 'AND'
         );
         $self->SUPER::Limit(
-            LEFTJOIN => $TicketCFs,
-            FIELD    => 'Disabled',
-            OPERATOR    => '=',
-            VALUE => '0',
-            ENTRYAGGREGATOR => 'AND');
+            LEFTJOIN        => $TicketCFs,
+            FIELD           => 'Disabled',
+            OPERATOR        => '=',
+            VALUE           => '0',
+            ENTRYAGGREGATOR => 'AND'
+        );
     }
 
-
   return $TicketCFs;
 }
 
@@ -1209,7 +1301,7 @@
     my $cfkey = $cfid ? $cfid : "$queue.$field";
     my $TicketCFs = $self->_CustomFieldJoin( $cfkey, $cfid, $field );
 
-    $self->_OpenParen if ($null_columns_ok);
+     $self->_OpenParen if ($null_columns_ok);
 
     $self->_SQLLimit(
         ALIAS      => $TicketCFs,
@@ -1232,8 +1324,6 @@
     }
     $self->_CloseParen if ($null_columns_ok);
 
-
-
 }
 
 # End Helper Functions
@@ -1253,19 +1343,21 @@
     my $self = shift;
     my @args = @_;
     my $clause;
-    my @res = ();
+    my @res   = ();
     my $order = 0;
 
-   foreach my $row( @args ) {
-       if( $row->{ALIAS} || $row->{FIELD} !~ /\./ ) {
-           push @res, $row;
-           next;
-       }
-       my ($field, $subkey) = split /\./, $row->{FIELD}, 2;
-       my $meta = $self->FIELDS->{ $field };
-       if( $meta->[0] eq 'WATCHERFIELD' ) {
-           my $users = $self->_WatcherJoin( $meta->[1], "order".$order++ );
-           push @res, { %$row, ALIAS => $users, FIELD => $subkey };
+    foreach my $row (@args) {
+        if ( $row->{ALIAS} || $row->{FIELD} !~ /\./ ) {
+            push @res, $row;
+            next;
+        }
+        my ( $field, $subkey ) = split /\./, $row->{FIELD}, 2;
+        my $meta = $self->FIELDS->{$field};
+        if ( $meta->[0] eq 'WATCHERFIELD' ) {
+            my $users = $self->_WatcherJoin( $meta->[1], "order" . $order++ );
+            push @res, { %$row, ALIAS => $users, FIELD => $subkey };
+        
+
        } elsif ( $meta->[0] eq 'CUSTOMFIELD' ) {
            my ($queue, $field, $cfid ) = $self->_CustomFieldDecipher( $subkey );
            my $cfkey = $cfid ? $cfid : "$queue.$field";
@@ -1318,12 +1410,12 @@
          push @res, { %$row, FIELD => "Owner=$nobodyId", ORDER => $order } ;
 
          push @res, { %$row, FIELD => "Priority", ORDER => $order } ;
-
-       } else {
-           push @res, $row;
-       }
-   }
-   return $self->SUPER::OrderByCols( @res );
+	}
+        else {
+            push @res, $row;
+        }
+    }
+    return $self->SUPER::OrderByCols(@res);
 }
 
 # }}}
@@ -1348,13 +1440,15 @@
         DESCRIPTION => undef,
         @_
     );
-    $args{'DESCRIPTION'} = $self->loc( "[_1] [_2] [_3]",
-        $args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'} )
-      if ( !defined $args{'DESCRIPTION'} );
+    $args{'DESCRIPTION'} = $self->loc(
+        "[_1] [_2] [_3]",  $args{'FIELD'},
+        $args{'OPERATOR'}, $args{'VALUE'}
+        )
+        if ( !defined $args{'DESCRIPTION'} );
 
     my $index = $self->_NextIndex;
 
- #make the TicketRestrictions hash the equivalent of whatever we just passed in;
+#make the TicketRestrictions hash the equivalent of whatever we just passed in;
 
     %{ $self->{'TicketRestrictions'}{$index} } = %args;
 
@@ -1362,11 +1456,15 @@
 
 # If we're looking at the effective id, we don't want to append the other clause
 # which limits us to tickets where id = effective id
-    if ( $args{'FIELD'} eq 'EffectiveId' ) {
+    if ( $args{'FIELD'} eq 'EffectiveId'
+        && ( !$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) )
+    {
         $self->{'looking_at_effective_id'} = 1;
     }
 
-    if ( $args{'FIELD'} eq 'Type' ) {
+    if ( $args{'FIELD'} eq 'Type'
+        && ( !$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) )
+    {
         $self->{'looking_at_type'} = 1;
     }
 
@@ -1383,7 +1481,7 @@
 
 sub _FreezeThawKeys {
     'TicketRestrictions', 'restriction_index', 'looking_at_effective_id',
-      'looking_at_type';
+        'looking_at_type';
 }
 
 # {{{ sub FreezeLimits
@@ -1420,8 +1518,8 @@
     require MIME::Base64;
 
     #We don't need to die if the thaw fails.
-    @{$self}{ $self->_FreezeThawKeys } =
-      eval { @{ Storable::thaw( MIME::Base64::base64_decode($in) ) }; };
+    @{$self}{ $self->_FreezeThawKeys }
+        = eval { @{ Storable::thaw( MIME::Base64::base64_decode($in) ) }; };
 
     $RT::Logger->error($@) if $@;
 
@@ -1467,8 +1565,9 @@
         FIELD       => 'Queue',
         VALUE       => $args{VALUE},
         OPERATOR    => $args{'OPERATOR'},
-        DESCRIPTION =>
-          join( ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE}, ),
+        DESCRIPTION => join(
+            ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE},
+        ),
     );
 
 }
@@ -1554,8 +1653,8 @@
         FIELD       => 'Type',
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
-        DESCRIPTION =>
-          join( ' ', $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, ),
+        DESCRIPTION => join( ' ',
+            $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, ),
     );
 }
 
@@ -1582,9 +1681,8 @@
         FIELD       => 'Subject',
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
-        DESCRIPTION => join(
-            ' ', $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'},
-        ),
+        DESCRIPTION => join( ' ',
+            $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'}, ),
     );
 }
 
@@ -1617,7 +1715,7 @@
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
         DESCRIPTION =>
-          join( ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, ),
+            join( ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, ),
     );
 }
 
@@ -1692,8 +1790,8 @@
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
         DESCRIPTION => join( ' ',
-            $self->loc('Final Priority'),
-            $args{'OPERATOR'}, $args{'VALUE'}, ),
+            $self->loc('Final Priority'), $args{'OPERATOR'},
+            $args{'VALUE'}, ),
     );
 }
 
@@ -1771,8 +1869,8 @@
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
         DESCRIPTION => join( ' ',
-            $self->loc('Ticket content'),
-            $args{'OPERATOR'}, $args{'VALUE'}, ),
+            $self->loc('Ticket content'), $args{'OPERATOR'},
+            $args{'VALUE'}, ),
     );
 }
 
@@ -1856,8 +1954,8 @@
         FIELD       => 'Owner',
         VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
-        DESCRIPTION =>
-          join( ' ', $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), ),
+        DESCRIPTION => join( ' ',
+            $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), ),
     );
 
 }
@@ -1916,7 +2014,9 @@
 sub LimitRequestor {
     my $self = shift;
     my %args = (@_);
-    $RT::Logger->error("Tickets->LimitRequestor is deprecated  at (". join(":",caller).")");
+    $RT::Logger->error( "Tickets->LimitRequestor is deprecated  at ("
+            . join( ":", caller )
+            . ")" );
     $self->LimitWatcher( TYPE => 'Requestor', @_ );
 
 }
@@ -1992,8 +2092,8 @@
 
     # translate RT2 From/To naming to RT3 TicketSQL naming
     my %fromToMap = qw(DependsOn DependentOn
-      MemberOf  HasMember
-      RefersTo  ReferredToBy);
+        MemberOf  HasMember
+        RefersTo  ReferredToBy);
 
     my $type = $args{'TYPE'};
     $type = $fromToMap{$type} if exists( $fromToMap{$type} );
@@ -2126,10 +2226,9 @@
 
     #Set the description if we didn't get handed it above
     unless ( $args{'DESCRIPTION'} ) {
-        $args{'DESCRIPTION'} =
-            $args{'FIELD'} . " "
-          . $args{'OPERATOR'} . " "
-          . $args{'VALUE'} . " GMT";
+        $args{'DESCRIPTION'} = $args{'FIELD'} . " "
+            . $args{'OPERATOR'} . " "
+            . $args{'VALUE'} . " GMT";
     }
 
     $self->Limit(%args);
@@ -2203,10 +2302,9 @@
 
     #Set the description if we didn't get handed it above
     unless ( $args{'DESCRIPTION'} ) {
-        $args{'DESCRIPTION'} =
-            $args{'FIELD'} . " "
-          . $args{'OPERATOR'} . " "
-          . $args{'VALUE'} . " GMT";
+        $args{'DESCRIPTION'} = $args{'FIELD'} . " "
+            . $args{'OPERATOR'} . " "
+            . $args{'VALUE'} . " GMT";
     }
 
     $self->Limit(%args);
@@ -2262,12 +2360,12 @@
 
     #If we are looking to compare with a null value.
     if ( $args{'OPERATOR'} =~ /^is$/i ) {
-        $args{'DESCRIPTION'} ||=
-          $self->loc( "Custom field [_1] has no value.", $CF->Name );
+        $args{'DESCRIPTION'}
+            ||= $self->loc( "Custom field [_1] has no value.", $CF->Name );
     }
     elsif ( $args{'OPERATOR'} =~ /^is not$/i ) {
-        $args{'DESCRIPTION'} ||=
-          $self->loc( "Custom field [_1] has a value.", $CF->Name );
+        $args{'DESCRIPTION'}
+            ||= $self->loc( "Custom field [_1] has a value.", $CF->Name );
     }
 
     # if we're not looking to compare with a null value
@@ -2285,16 +2383,16 @@
 
     my @rest;
     @rest = ( ENTRYAGGREGATOR => 'AND' )
-      if ( $CF->Type eq 'SelectMultiple' );
+        if ( $CF->Type eq 'SelectMultiple' );
 
     $self->Limit(
         VALUE => $args{VALUE},
         FIELD => "CF."
-          . (
+            . (
               $q
             ? $q . ".{" . $CF->Name . "}"
             : $CF->Name
-          ),
+            ),
         OPERATOR    => $args{OPERATOR},
         CUSTOMFIELD => 1,
         @rest,
@@ -2383,7 +2481,8 @@
             push( @{ $self->{'items_array'} }, $item );
         }
         $self->GotoItem($placeholder);
-        $self->{'items_array'} = $self->ItemsOrderBy( $self->{'items_array'} );
+        $self->{'items_array'}
+            = $self->ItemsOrderBy( $self->{'items_array'} );
     }
     return ( $self->{'items_array'} );
 }
@@ -2399,18 +2498,21 @@
     my $Ticket = $self->SUPER::Next();
     if ( ( defined($Ticket) ) and ( ref($Ticket) ) ) {
 
-	    if ( $Ticket->__Value('Status') eq 'deleted' &&
-			!$self->{'allow_deleted_search'} ) {
-		return($self->Next());
-	    }
-            # Since Ticket could be granted with more rights instead
-            # of being revoked, it's ok if queue rights allow
-            # ShowTicket.  It seems need another query, but we have
-            # rights cache in Principal::HasRight.
-  	    elsif ($Ticket->QueueObj->CurrentUserHasRight('ShowTicket') ||
-                   $Ticket->CurrentUserHasRight('ShowTicket')) {
-		return($Ticket);
-	    }
+        if ( $Ticket->__Value('Status') eq 'deleted'
+            && !$self->{'allow_deleted_search'} )
+        {
+            return ( $self->Next() );
+        }
+
+        # Since Ticket could be granted with more rights instead
+        # of being revoked, it's ok if queue rights allow
+        # ShowTicket.  It seems need another query, but we have
+        # rights cache in Principal::HasRight.
+        elsif ($Ticket->QueueObj->CurrentUserHasRight('ShowTicket')
+            || $Ticket->CurrentUserHasRight('ShowTicket') )
+        {
+            return ($Ticket);
+        }
 
         if ( $Ticket->__Value('Status') eq 'deleted' ) {
             return ( $self->Next() );
@@ -2493,10 +2595,10 @@
     my $self  = shift;
     my $field = shift;
     map $self->{'TicketRestrictions'}{$_}{'VALUE'}, grep {
-             $self->{'TicketRestrictions'}{$_}{'FIELD'}    eq $field
-          && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "="
-      }
-      keys %{ $self->{'TicketRestrictions'} };
+               $self->{'TicketRestrictions'}{$_}{'FIELD'}    eq $field
+            && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "="
+        }
+        keys %{ $self->{'TicketRestrictions'} };
 }
 
 # }}}
@@ -2555,9 +2657,9 @@
         #use Data::Dumper;
         #print Dumper($restriction),"\n";
 
-     # We need to reimplement the subclause aggregation that SearchBuilder does.
-     # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main',
-     # Then SB AND's the different Subclauses together.
+   # We need to reimplement the subclause aggregation that SearchBuilder does.
+   # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main',
+   # Then SB AND's the different Subclauses together.
 
         # So, we want to group things into Subclauses, convert them to
         # SQL, and then join them with the appropriate DefaultEA.
@@ -2580,14 +2682,15 @@
         }
 
         die "I don't know about $field yet"
-          unless ( exists $FIELD_METADATA{$realfield} or $restriction->{CUSTOMFIELD} );
+            unless ( exists $FIELD_METADATA{$realfield}
+            or $restriction->{CUSTOMFIELD} );
 
         my $type = $FIELD_METADATA{$realfield}->[0];
         my $op   = $restriction->{'OPERATOR'};
 
         my $value = (
-            grep  { defined }
-              map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET)
+            grep    {defined}
+                map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET)
         )[0];
 
         # this performs the moral equivalent of defined or/dor/C<//>,
@@ -2605,10 +2708,12 @@
         # defined $restriction->{'TARGET'} ?
         # $restriction->{TARGET} )
 
-        my $ea = $restriction->{ENTRYAGGREGATOR} || $DefaultEA{$type} || "AND";
+        my $ea = $restriction->{ENTRYAGGREGATOR}
+            || $DefaultEA{$type}
+            || "AND";
         if ( ref $ea ) {
             die "Invalid operator $op for $field ($type)"
-              unless exists $ea->{$op};
+                unless exists $ea->{$op};
             $ea = $ea->{$op};
         }
 
@@ -2656,8 +2761,10 @@
     delete $self->{'raw_rows'};
     delete $self->{'rows'};
     delete $self->{'count_all'};
+
     my $sql = $self->Query;    # Violating the _SQL namespace
     if ( !$sql || $self->{'RecalcTicketLimits'} ) {
+
         #  "Restrictions to Clauses Branch\n";
         my $clauseRef = eval { $self->_RestrictionsToClauses; };
         if ($@) {
@@ -2694,7 +2801,7 @@
             $self->{'item_map'}->{$id}->{'defined'} = 1;
             $self->{'item_map'}->{$id}->{prev}      = $prev;
             $self->{'item_map'}->{$id}->{next}      = $items->[0]->EffectiveId
-              if ( $items->[0] );
+                if ( $items->[0] );
             $prev = $id;
         }
         $self->{'item_map'}->{'last'} = $prev;
@@ -2715,13 +2822,14 @@
 sub ItemMap {
     my $self = shift;
     $self->_BuildItemMap()
-      unless ( $self->{'items_array'} and $self->{'item_map'} );
+        unless ( $self->{'items_array'} and $self->{'item_map'} );
     return ( $self->{'item_map'} );
 }
 
 =cut
 
 
+
 }
 
 
@@ -2742,7 +2850,6 @@
     $self->RedoSearch();
 }
 
-
 =head1 FLAGS
 
 RT::Tickets supports several flags which alter search behavior:

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay_SQL.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay_SQL.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Tickets_Overlay_SQL.pm	Tue Nov 22 00:41:39 2005
@@ -85,11 +85,13 @@
 sub _SQLLimit {
   my $self = shift;
     my %args = (@_);
-    if ($args{'FIELD'} eq 'EffectiveId') {
+    if ($args{'FIELD'} eq 'EffectiveId' &&
+         (!$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) ) {
         $self->{'looking_at_effective_id'} = 1;
     }      
     
-    if ($args{'FIELD'} eq 'Type') {
+    if ($args{'FIELD'} eq 'Type' &&
+         (!$args{'ALIAS'} || $args{'ALIAS'} eq 'main' ) ) {
         $self->{'looking_at_type'} = 1;
     }
 
@@ -288,7 +290,7 @@
       #    print "$ea Key=[$key] op=[$op]  val=[$val]\n";
 
 
-   my $subkey;
+   my $subkey = '';
    if ($key =~ /^(.+?)\.(.+)$/) {
      $key = $1;
      $subkey = $2;
@@ -377,11 +379,11 @@
     my $first = 1;
 
     # Build SQL from the data hash
-     for my $data ( @{ $clauses->{$f} } ) {
-      $sql .= $data->[0] unless $first; $first=0;
-      $sql .= " '". $data->[2] . "' ";
-      $sql .= $data->[3] . " ";
-      $sql .= "'". $data->[4] . "' ";
+    for my $data ( @{ $clauses->{$f} } ) {
+      $sql .= $data->[0] unless $first; $first=0; # ENTRYAGGREGATOR
+      $sql .= " '". $data->[2] . "' ";            # FIELD
+      $sql .= $data->[3] . " ";                   # OPERATOR
+      $sql .= "'". $data->[4] . "' ";             # VALUE
     }
 
     push @sql, " ( " . $sql . " ) ";

Modified: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/03web_compiliation_errors.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/t/regression/03web_compiliation_errors.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/03web_compiliation_errors.t	Tue Nov 22 00:41:39 2005
@@ -12,22 +12,18 @@
 my $agent = WWW::Mechanize->new();
 
 # give the agent a place to stash the cookies
-
 $agent->cookie_jar($cookie_jar);
 
 use RT;
-RT::LoadConfig;
-
-use RT;
 RT::LoadConfig();
+
 # get the top page
 my $url = "http://localhost:".$RT::WebPort.$RT::WebPath."/";
-diag $url;
+diag "Base URL is '$url'" if $ENV{TEST_VERBOSE};
 $agent->get($url);
 
 is ($agent->{'status'}, 200, "Loaded a page");
 
-
 # {{{ test a login
 
 # follow the link marked "Login"
@@ -48,20 +44,19 @@
 find ( \&wanted , 'html/');
 
 sub wanted {
-        -f  && /\.html$/ && $_ !~ /Logout.html$/  && test_get($File::Find::name);
+        -f  && /\.html$/ && $_ !~ /Logout.html$/ && test_get($File::Find::name);
 }       
 
 sub test_get {
         my $file = shift;
 
-
-        $file =~ s#^html/##; 
+        $file =~ s#^html/##;
+        diag( "testing $url/$file" ) if $ENV{TEST_VERBOSE};
         ok ($agent->get("$url/$file", "GET $url/$file"));
         is ($agent->{'status'}, 200, "Loaded $file");
 #        ok( $agent->{'content'} =~ /Logout/i, "Found a logout link on $file ");
         ok( $agent->{'content'} !~ /Not logged in/i, "Still logged in for  $file");
         ok( $agent->{'content'} !~ /raw error/i, "Didn't get a Mason compilation error on $file");
-        
 }
 
 # }}}

Modified: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/04send_email.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/t/regression/04send_email.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/04send_email.t	Tue Nov 22 00:41:39 2005
@@ -1,10 +1,12 @@
 #!/usr/bin/perl -w
 
 use strict;
-use Test::More tests => 137;
+use Test::More tests => 136;
+
 use RT;
 RT::LoadConfig();
 RT::Init;
+
 use RT::EmailParser;
 use RT::Tickets;
 use RT::Action::SendEmail;
@@ -20,17 +22,29 @@
 
 is (__PACKAGE__, 'main', "We're operating in the main package");
 
-
 {
-no warnings qw/redefine/;
-sub RT::Action::SendEmail::SendMessage {
+    no warnings qw/redefine/;
+    sub RT::Action::SendEmail::SendMessage {
         my $self = shift;
         my $MIME = shift;
 
         main::_fired_scrip($self->ScripObj);
         main::ok(ref($MIME) eq 'MIME::Entity', "hey, look. it's a mime entity");
+    }
 }
 
+# some utils
+sub first_txn    { return $_[0]->Transactions->First }
+sub first_attach { return first_txn($_[0])->Attachments->First }
+
+sub count_txns { return $_[0]->Transactions->Count }
+sub count_attachs { return first_txn($_[0])->Attachments->Count }
+
+sub file_content
+{
+    open my $fh, "<:raw", $_[0] or die "couldn't open file '$_[0]': $!";
+    local $/;
+    return scalar <$fh>;
 }
 
 # instrument SendEmail to pass us what it's about to send.
@@ -40,7 +54,7 @@
 
 
 # Let's test to make sure a multipart/report is processed correctly
-my $content =  `cat $RT::BasePath/lib/t/data/multipart-report` || die "couldn't find new content";
+my $content =  file_content("$RT::BasePath/lib/t/data/multipart-report");
 # be as much like the mail gateway as possible.
 use RT::Interface::Email;
                                   
@@ -53,7 +67,7 @@
 isa_ok($tick, "RT::Ticket", "got a ticket object");
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /The original message was received/, "It's the bounce");
+ok (first_txn($tick)->Content =~ /The original message was received/, "It's the bounce");
 
 
 # make sure it fires scrips.
@@ -96,7 +110,7 @@
 # create an iso 8859-1 ticket
 @scrips_fired = ();
 
-$content =  `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
+$content =  file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
 
 
 
@@ -114,7 +128,7 @@
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
+ok (first_txn($tick)->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
 
 
 # make sure it fires scrips.
@@ -144,7 +158,7 @@
 # create an iso 8859-1 ticket
 @scrips_fired = ();
 
- $content =  `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
 # be as much like the mail gateway as possible.
 use RT::Interface::Email;
                                   
@@ -156,7 +170,7 @@
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
+ok (first_txn($tick)->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
 
 
 # make sure it fires scrips.
@@ -238,7 +252,7 @@
 
 # {{{ test a multipart alternative containing a text-html part with an umlaut
 
- $content =  `cat $RT::BasePath/lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/multipart-alternative-with-umlaut");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -246,16 +260,17 @@
 # be as much like the mail gateway as possible.
 &umlauts_redef_sendmessage;
 
- %args =        (message => $content, queue => 1, action => 'correspond');
- RT::Interface::Email::Gateway(\%args);
- $tickets = RT::Tickets->new($RT::SystemUser);
+%args = (message => $content, queue => 1, action => 'correspond');
+RT::Interface::Email::Gateway(\%args);
+$tickets = RT::Tickets->new($RT::SystemUser);
 $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
 $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
- $tick = $tickets->First();
+$tick = $tickets->First();
+
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /causes Error/, "We recorded the content right as text-plain");
-is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
+ok (first_txn($tick)->Content =~ /causes Error/, "We recorded the content right as text-plain");
+is (count_attachs($tick) , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
 
 sub umlauts_redef_sendmessage {
     no warnings qw/redefine/;
@@ -266,7 +281,7 @@
 
 # {{{ test a text-html message with an umlaut
 
- $content =  `cat $RT::BasePath/lib/t/data/text-html-with-umlaut` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/text-html-with-umlaut");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -282,29 +297,28 @@
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Attachments->First->Content =~ /causes Error/, "We recorded the content as containing 'causes error'");
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content as text/html");
-ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
+ok (first_attach($tick)->Content =~ /causes Error/, "We recorded the content as containing 'causes error'") or diag( first_attach($tick)->Content );
+ok (first_attach($tick)->ContentType =~ /text\/html/, "We recorded the content as text/html");
+is (count_attachs($tick), 1 , "Has one attachment, presumably a text-html and a multipart alternative");
 
 sub text_html_umlauts_redef_sendmessage {
     no warnings qw/redefine/;
     eval 'sub RT::Action::SendEmail::SendMessage { 
-                my $self = shift; 
-                my $MIME = shift; 
-                use Data::Dumper;
+                my $self = shift;
+                my $MIME = shift;
                 return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
-                ok (is $MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
+                is ($MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
                 is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
                 is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
                 is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
-                 }';
+         }';
 }
 
 # }}}
 
 # {{{ test a text-html message with russian characters
 
- $content =  `cat $RT::BasePath/lib/t/data/text-html-in-russian` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/text-html-in-russian");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -320,8 +334,8 @@
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content right as text-html");
-ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
+ok (first_attach($tick)->ContentType =~ /text\/html/, "We recorded the content right as text-html");
+ok (count_attachs($tick) ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
 
 sub text_html_russian_redef_sendmessage {
     no warnings qw/redefine/;
@@ -347,7 +361,7 @@
 
 unshift (@RT::EmailInputEncodings, 'koi8-r');
 $RT::EmailOutputEncoding = 'koi8-r';
-$content =  `cat $RT::BasePath/lib/t/data/russian-subject-no-content-type` || die "couldn't find new content";
+$content =  file_content("$RT::BasePath/lib/t/data/russian-subject-no-content-type");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -362,8 +376,8 @@
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/plain/, "We recorded the content type right");
-ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-plain");
+ok (first_attach($tick)->ContentType =~ /text\/plain/, "We recorded the content type right");
+ok (count_attachs($tick) ==1 , "Has one attachment, presumably a text-plain");
 is ($tick->Subject, "\x{442}\x{435}\x{441}\x{442} \x{442}\x{435}\x{441}\x{442}", "Recorded the subject right");
 sub text_plain_russian_redef_sendmessage {
     no warnings qw/redefine/;
@@ -375,7 +389,7 @@
                  my $subject  = $MIME->head->get("subject");
                 chomp($subject);
                 #is( $subject ,      /^=\?KOI8-R\?B\?W2V4YW1wbGUuY39tICM3XSDUxdPUINTF09Q=\?=/ , "The $subject is encoded correctly");
-		};
+                };
                  ';
 }
 
@@ -386,7 +400,7 @@
 
 # {{{ test a message containing a nested RFC 822 message
 
- $content =  `cat $RT::BasePath/lib/t/data/nested-rfc-822` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/nested-rfc-822");
 ok ($content, "Loaded nested-rfc-822 to test");
 
 $parser->ParseMIMEEntityFromScalar($content);
@@ -402,8 +416,8 @@
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 is ($tick->Subject, "[Jonas Liljegren] Re: [Para] Niv\x{e5}er?");
-ok ($tick->Transactions->First->Attachments->First->ContentType =~ /multipart\/mixed/, "We recorded the content type right");
-is ($tick->Transactions->First->Attachments->Count , 5 , "Has one attachment, presumably a text-plain and a message RFC 822 and another plain");
+ok (first_attach($tick)->ContentType =~ /multipart\/mixed/, "We recorded the content type right");
+is (count_attachs($tick) , 5 , "Has one attachment, presumably a text-plain and a message RFC 822 and another plain");
 sub text_plain_nested_redef_sendmessage {
     no warnings qw/redefine/;
     eval 'sub RT::Action::SendEmail::SendMessage { 
@@ -414,9 +428,9 @@
                  my $subject  =  $MIME->head->get("subject");
                  $subject  = MIME::Base64::decode_base64( $subject);
                 chomp($subject);
-		# TODO, why does this test fail
+                # TODO, why does this test fail
                 #ok($subject =~ qr{Niv\x{e5}er}, "The subject matches the word - $subject");
-		1;
+                1;
                  }';
 }
 
@@ -425,7 +439,7 @@
 
 # {{{ test a multipart alternative containing a uuencoded mesage generated by lotus notes
 
- $content =  `cat $RT::BasePath/lib/t/data/notes-uuencoded` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/notes-uuencoded");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -441,8 +455,8 @@
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /from Lotus Notes/, "We recorded the content right");
-is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments");
+ok (first_txn($tick)->Content =~ /from Lotus Notes/, "We recorded the content right");
+is (count_attachs($tick) , 3 , "Has three attachments");
 
 sub notes_redef_sendmessage {
     no warnings qw/redefine/;
@@ -453,7 +467,7 @@
 
 # {{{ test a multipart that crashes the file-based mime-parser works
 
- $content =  `cat $RT::BasePath/lib/t/data/crashes-file-based-parser` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/crashes-file-based-parser");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -469,8 +483,8 @@
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok ($tick->Transactions->First->Content =~ /FYI/, "We recorded the content right");
-is ($tick->Transactions->First->Attachments->Count , 5 , "Has three attachments");
+ok (first_txn($tick)->Content =~ /FYI/, "We recorded the content right");
+is (count_attachs($tick) , 5 , "Has three attachments");
 
 sub crashes_redef_sendmessage {
     no warnings qw/redefine/;
@@ -483,7 +497,7 @@
 
 # {{{ test a multi-line RT-Send-CC header
 
- $content =  `cat $RT::BasePath/lib/t/data/rt-send-cc` || die "couldn't find new content";
+ $content =  file_content("$RT::BasePath/lib/t/data/rt-send-cc");
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -497,7 +511,7 @@
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-my $cc = $tick->Transactions->First->Attachments->First->GetHeader('RT-Send-Cc');
+my $cc = first_attach($tick)->GetHeader('RT-Send-Cc');
 ok ($cc =~ /test1/, "Found test 1");
 ok ($cc =~ /test2/, "Found test 2");
 ok ($cc =~ /test3/, "Found test 3");

Modified: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/12-search.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/t/regression/12-search.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/12-search.t	Tue Nov 22 00:41:39 2005
@@ -163,14 +163,9 @@
 $tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search'");
 is($tix->Count, 6, "LIKE requestor");
 
-TODO: {
-    
-    local $TODO = "Can't search for 'no requestor"; 
-    $tix = RT::Tickets->new($RT::SystemUser);
-    $tix->FromSQL("Queue = '$queue' AND Requestors IS NULL");
-    is($tix->Count, 1, "Search for no requestor");
-
-};
+$tix = RT::Tickets->new($RT::SystemUser);
+$tix->FromSQL("Queue = '$queue' AND Requestors IS NULL");
+is($tix->Count, 1, "Search for no requestor");
 
 $tix = RT::Tickets->new($RT::SystemUser);
 $tix->FromSQL("Queue = '$queue' AND Subject = 'SearchTest1'");

Modified: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/13-attribute-tests.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/t/regression/13-attribute-tests.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/13-attribute-tests.t	Tue Nov 22 00:41:39 2005
@@ -58,9 +58,7 @@
 $runid_attr = $user->FirstAttribute($runid);
 ok($runid_attr, "got some sort of attribute");
 isa_ok($runid_attr, 'RT::Attribute');
-TODO: { local $TODO = "which attribute is returned by FirstAttribute is undefined";
-    is($runid_attr->Content, 'First', "got the first content back still");
-}
+is($runid_attr->Content, 'First', "got the first content back still");
 
 is ($attr->Count,3, " Three attrs after adding a secondvalue to $runid");
 ($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "First");

Modified: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/20-sort-by-requestor.t
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/t/regression/20-sort-by-requestor.t	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/20-sort-by-requestor.t	Tue Nov 22 00:41:39 2005
@@ -11,10 +11,9 @@
 my $queue = 'SearchTests-'.rand(200);
 $q->Create(Name => $queue);
 
-my @requestors = ( ('bravo at example.com') x 6, ('alpha at example.com') x 6,
-                   ('delta at example.com') x 6, ('charlie at example.com') x 6,
-                   (undef) x 6);
-my @subjects = ("first test", "second test", "third test", "fourth test", "fifth test") x 6;
+my @requestors = ( ('bravo at example.com') x 5, ('alpha at example.com') x 5,
+                   ('delta at example.com') x 5, ('charlie at example.com') x 5);
+my @subjects = ("first test", "second test", "third test", "fourth test") x 5;
 while (@requestors) {
     my $t = RT::Ticket->new($RT::SystemUser);
     my ( $id, undef $msg ) = $t->Create(
@@ -28,7 +27,7 @@
 {
     my $tix = RT::Tickets->new($RT::SystemUser);
     $tix->FromSQL("Queue = '$queue'");
-    is($tix->Count, 30, "found thirty tickets");
+    is($tix->Count, 20, "found twenty tickets");
 }
 
 {
@@ -37,28 +36,96 @@
     $tix->OrderByCols({ FIELD => "Subject" });
     my @subjects;
     while (my $t = $tix->Next) { push @subjects, $t->Subject; }
-    is(@subjects, 6, "found six tickets");
+    is(@subjects, 5, "found five tickets");
     is_deeply( \@subjects, [ sort @subjects ], "Subjects are sorted");
 }
 
+sub check_emails_order
+{
+    my ($tix,$count,$order) = (@_);
+    my @mails;
+    while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
+    is(@mails, $count, "found $count tickets");
+    my @required_order;
+    if( $order =~ /asc/i ) {
+        @required_order = sort { $a? ($b? ($a cmp $b) : -1) : 1} @mails;
+    } else {
+        @required_order = sort { $a? ($b? ($b cmp $a) : -1) : 1} @mails;
+    }
+    foreach( reverse splice @mails ) {
+        if( $_ ) { unshift @mails, $_ }
+        else { push @mails, $_ }
+    }
+    is_deeply( \@mails, \@required_order, "Addresses are sorted");
+}
+
 {
     my $tix = RT::Tickets->new($RT::SystemUser);
     $tix->FromSQL("Queue = '$queue' AND subject = 'first test' AND Requestor.EmailAddress LIKE 'example.com'");
     $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
-    my @mails;
-    while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
-    is(@mails, 5, "found five tickets");
-    is_deeply( \@mails, [ sort @mails ], "Addresses are sorted");
+    check_emails_order($tix, 5, 'ASC');
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+    check_emails_order($tix, 5, 'DESC');
 }
 
 {
     my $tix = RT::Tickets->new($RT::SystemUser);
-    $tix->FromSQL("Queue = '$queue' AND subject = 'first test'");
+    $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
     $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
-    my @mails;
-    while (my $t = $tix->Next) { push @mails, $t->RequestorAddresses; }
-    is(@mails, 6, "found six tickets");
-    is_deeply( \@mails, [ sort @mails ], "Addresses are sorted");
+    check_emails_order($tix, 5, 'ASC');
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+    check_emails_order($tix, 5, 'DESC');
+}
+
+
+{
+    # create ticket with empty requestor list
+    my $t = RT::Ticket->new($RT::SystemUser);
+    my ( $id, $msg ) = $t->Create(
+        Queue      => $q->id,
+        Subject    => "first test",
+    );
+    ok( $id, "ticket created" ) or diag( "error: $msg" );
+    is( $t->RequestorAddresses, '', "requestor address is empty" );
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+    check_emails_order($tix, 6, 'ASC');
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+    check_emails_order($tix, 6, 'DESC');
+}
+
+{
+    # create ticket with group as member of the requestors group
+    my $t = RT::Ticket->new($RT::SystemUser);
+    my ( $id, $msg ) = $t->Create(
+        Queue      => $q->id,
+        Subject    => "first test",
+        Requestor  => 'badaboom at example.com',
+    );
+    ok( $id, "ticket created" ) or diag( "error: $msg" );
+
+    my $g = RT::Group->new($RT::SystemUser);
+
+    my ($gid);
+    ($gid, $msg) = $g->CreateUserDefinedGroup(Name => '20-sort-by-requestor.t-'.rand(200));
+    ok($gid, "created group") or diag("error: $msg");
+
+    ($id, $msg) = $t->Requestors->AddMember( $gid );
+    ok($id, "added group to requestors group") or diag("error: $msg");
+}
+
+    my $tix = RT::Tickets->new($RT::SystemUser);    
+    $tix->FromSQL("Queue = '$queue' AND Subject = 'first test'");
+TODO: {
+    local $TODO = "if group has non users members we get wrong order";
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress" });
+    check_emails_order($tix, 7, 'ASC');
 }
+    $tix->OrderByCols({ FIELD => "Requestor.EmailAddress", ORDER => 'DESC' });
+    check_emails_order($tix, 7, 'DESC');
 
 # vim:ft=perl:

Added: rt/branches/3.7-EXPERIMENTAL/lib/t/regression/22search_tix_by_watcher.t
==============================================================================
--- (empty file)
+++ rt/branches/3.7-EXPERIMENTAL/lib/t/regression/22search_tix_by_watcher.t	Tue Nov 22 00:41:39 2005
@@ -0,0 +1,215 @@
+#!/usr/bin/perl -w
+use strict;
+use warnings;
+
+use Test::More qw/no_plan/;
+use_ok('RT');
+RT::LoadConfig();
+RT::Init();
+use RT::Ticket;
+
+my $q = RT::Queue->new($RT::SystemUser);
+my $queue = 'SearchTests-'.rand(200);
+$q->Create(Name => $queue);
+
+my @data = (
+    { Subject => '1', Requestor => 'bravo at example.com' },
+    { Subject => '2', Cc => 'alpha at example.com' },
+);
+
+my $total = 0;
+
+sub add_tix_from_data {
+    my @res = ();
+    while (@data) {
+        my $t = RT::Ticket->new($RT::SystemUser);
+        my ( $id, undef $msg ) = $t->Create(
+            Queue => $q->id,
+            %{ shift(@data) },
+        );
+        ok( $id, "ticket created" ) or diag("error: $msg");
+        push @res, $t;
+        $total++;
+    }
+    return @res;
+}
+add_tix_from_data();
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue'");
+    is($tix->Count, $total, "found $total tickets");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Requestor = 'bravo\@example.com'");
+    is($tix->Count, 1, "found ticket(s)");
+    is($tix->First->RequestorAddresses, 'bravo at example.com',"correct requestor");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Cc = 'alpha\@example.com'");
+    is($tix->Count, 1, "found ticket(s)");
+    is($tix->First->CcAddresses, 'alpha at example.com', "correct Cc");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND (Cc = 'alpha\@example.com' OR Requestor = 'bravo\@example.com')");
+    is($tix->Count, 2, "found ticket(s)");
+    my @mails;
+    while (my $t = $tix->Next) {
+        push @mails, $t->RequestorAddresses;
+        push @mails, $t->CcAddresses;
+    }
+    @mails = sort grep $_, @mails;
+    is_deeply(\@mails, ['alpha at example.com', 'bravo at example.com'], "correct addresses");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND (Cc = 'alpha\@example.com' AND Requestor = 'bravo\@example.com')");
+    is($tix->Count, 0, "found ticket(s)");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Cc != 'alpha\@example.com'");
+    is($tix->Count, 1, "found ticket(s)");
+    is($tix->First->RequestorAddresses, 'bravo at example.com',"correct requestor");
+}
+
+ at data = ( { Subject => '3' } );
+add_tix_from_data();
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Cc != 'alpha\@example.com'");
+    is($tix->Count, 2, "found ticket(s)");
+    my @mails;
+    while (my $t = $tix->Next) { push @mails, ($t->CcAddresses||'') }
+    is( scalar(grep 'alpha at example.com' eq $_, @mails), 0, "no tickets with non required data");
+}
+
+{
+    # has no requestor search
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Requestor IS NULL");
+    is($tix->Count, 2, "found ticket(s)");
+    my @mails;
+    while (my $t = $tix->Next) { push @mails, ($t->RequestorAddresses||'') }
+    is( scalar(grep $_, @mails), 0, "no tickets with non required data");
+}
+
+{
+    # has at least one requestor search
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Requestor IS NOT NULL");
+    is($tix->Count, 1, "found ticket(s)");
+    my @mails;
+    while (my $t = $tix->Next) { push @mails, ($t->RequestorAddresses||'') }
+    is( scalar(grep !$_, @mails), 0, "no tickets with non required data");
+}
+
+ at data = ( { Subject => '3', Requestor => 'charly at example.com' } );
+add_tix_from_data();
+
+{
+    # has no requestor search
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND
+                   (Requestor = 'bravo\@example.com' OR Requestor = 'charly\@example.com')");
+    is($tix->Count, 2, "found ticket(s)");
+    my @mails;
+    while (my $t = $tix->Next) { push @mails, ($t->RequestorAddresses||'') }
+    is_deeply( [sort @mails],
+               ['bravo at example.com', 'charly at example.com'],
+               "requestor addresses are correct"
+             );
+}
+
+# owner is special watcher because reference is duplicated in two places,
+# owner was an ENUM field now it's WATCHERFIELD, but should support old
+# style ENUM searches for backward compatibility
+my $nobody = RT::Nobody();
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner = '". $nobody->id ."'");
+    is($tix->Count, 4, "found ticket(s)");
+}
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner = '". $nobody->Name ."'");
+    is($tix->Count, 4, "found ticket(s)");
+}
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner != '". $nobody->id ."'");
+    is($tix->Count, 0, "found ticket(s)");
+}
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner != '". $nobody->Name ."'");
+    is($tix->Count, 0, "found ticket(s)");
+}
+
+{
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner.Name LIKE 'nob'");
+    is($tix->Count, 4, "found ticket(s)");
+}
+
+{
+    # create ticket and force type to not a 'ticket' value
+    # bug #6898 at rt3.fsck.com
+    # and http://marc.theaimsgroup.com/?l=rt-devel&m=112662934627236&w=2
+    @data = ( { Subject => 'not a ticket' } );
+    my($t) = add_tix_from_data();
+    $t->_Set( Field             => 'Type',
+              Value             => 'not a ticket',
+              CheckACL          => 0,
+              RecordTransaction => 0,
+            );
+    $total--;
+
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND Owner = 'Nobody'");
+    is($tix->Count, 4, "found ticket(s)");
+}
+
+{
+    my $everyone = RT::Group->new( $RT::SystemUser );
+    $everyone->LoadSystemInternalGroup('Everyone');
+    ok($everyone->id, "loaded 'everyone' group");
+    my($id, $msg) = $everyone->PrincipalObj->GrantRight( Right => 'OwnTicket',
+                                                         Object => $q
+                                                       );
+    ok($id, "granted OwnTicket right to Everyone on '$queue'") or diag("error: $msg");
+
+    my $u = RT::User->new( $RT::SystemUser );
+    $u->LoadByCols( EmailAddress => 'alpha at example.com' );
+    ok($u->id, "loaded user");
+    @data = ( { Subject => '4', Owner => $u->id } );
+    my($t) = add_tix_from_data();
+    is( $t->Owner, $u->id, "created ticket with custom owner" );
+    my $u_alpha_id = $u->id;
+
+    $u = RT::User->new( $RT::SystemUser );
+    $u->LoadByCols( EmailAddress => 'bravo at example.com' );
+    ok($u->id, "loaded user");
+    @data = ( { Subject => '5', Owner => $u->id } );
+    ($t) = add_tix_from_data();
+    is( $t->Owner, $u->id, "created ticket with custom owner" );
+    my $u_bravo_id = $u->id;
+
+    my $tix = RT::Tickets->new($RT::SystemUser);
+    $tix->FromSQL("Queue = '$queue' AND
+                   ( Owner = '$u_alpha_id' OR
+                     Owner = '$u_bravo_id' )"
+                 );
+    is($tix->Count, 2, "found ticket(s)");
+}
+
+exit(0)

Modified: rt/branches/3.7-EXPERIMENTAL/sbin/rt-test-dependencies.in
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/sbin/rt-test-dependencies.in	(original)
+++ rt/branches/3.7-EXPERIMENTAL/sbin/rt-test-dependencies.in	Tue Nov 22 00:41:39 2005
@@ -139,6 +139,12 @@
 
 You can also specify -v or --verbose to list the status of all dependencies,
 rather than just the missing ones.
+
+The "RT_FIX_DEPS_CMD" environment variable, if set, will be used
+instead of the standard CPAN shell by --install to install any
+required modules.  It will be called with the module name, or, if
+"RT_FIX_DEPS_CMD" contains a "%s", will replace the "%s" with the
+module name ebcore calling the program.
 .
 }
 
@@ -312,7 +318,20 @@
 
 sub resolve_dep {
     my $module = shift;
-    system( qq[@PERL@ -MCPAN -e'install("$module")'] );
+    print "\tInstall module $module\n";
+    my $ext = $ENV{'RT_FIX_DEPS_CMD'};
+    unless( $ext ) {
+	require CPAN;
+	return CPAN::Shell->install($module);
+    }
+
+    if( $ext =~ /\%s/) {
+	$ext =~ s/\%s/$module/g; # sprintf( $ext, $module );
+    } else {
+	$ext .= " $module";
+    }
+    print "\t\tcommand: '$ext'\n";
+    return scalar `$ext 1>&2`;
 }
 
 sub download_mods {


More information about the Rt-commit mailing list