merge in rt 3.4.6. *gulp*!
authorivan <ivan>
Mon, 3 Mar 2008 23:07:58 +0000 (23:07 +0000)
committerivan <ivan>
Mon, 3 Mar 2008 23:07:58 +0000 (23:07 +0000)
60 files changed:
rt/Changelog
rt/bin/rt-crontool.in
rt/bin/rt.in
rt/bin/webmux.pl.in
rt/configure
rt/configure.ac
rt/etc/RT_Config.pm.in
rt/etc/schema.mysql
rt/html/Admin/Groups/index.html
rt/html/Elements/CollectionAsTable/ParseFormat
rt/html/Elements/EditCustomFieldSelect
rt/html/Elements/QuickCreate
rt/html/Elements/Quicksearch
rt/html/Elements/SelectNewTicketQueue
rt/html/Elements/ShowCustomFields
rt/html/REST/1.0/Forms/ticket/default
rt/html/REST/1.0/NoAuth/mail-gateway
rt/html/REST/1.0/search/ticket
rt/html/SelfService/Create.html
rt/html/Ticket/Create.html
rt/html/Ticket/Display.html
rt/html/Ticket/Elements/EditCustomFields
rt/html/Ticket/Elements/PreviewScrips
rt/html/Ticket/Elements/ShowBasics
rt/html/Ticket/Elements/ShowDates
rt/html/Ticket/Elements/ShowHistory
rt/html/Ticket/Elements/ShowRequestor
rt/html/Ticket/Elements/ShowSummary
rt/lib/RT.pm.in
rt/lib/RT/Action/SendEmail.pm
rt/lib/RT/Attachment_Overlay.pm
rt/lib/RT/Condition/Generic.pm
rt/lib/RT/CustomField_Overlay.pm
rt/lib/RT/Date.pm
rt/lib/RT/Group_Overlay.pm
rt/lib/RT/I18N.pm
rt/lib/RT/I18N/de.po
rt/lib/RT/I18N/pt_br.po
rt/lib/RT/Interface/CLI.pm
rt/lib/RT/Interface/Email.pm
rt/lib/RT/Interface/Email/Auth/MailFrom.pm
rt/lib/RT/Interface/REST.pm
rt/lib/RT/Interface/Web.pm
rt/lib/RT/Interface/Web/Handler.pm
rt/lib/RT/Link_Overlay.pm
rt/lib/RT/Links_Overlay.pm
rt/lib/RT/Record.pm
rt/lib/RT/Template_Overlay.pm
rt/lib/RT/Ticket_Overlay.pm
rt/lib/RT/Tickets_Overlay.pm
rt/lib/RT/Transaction_Overlay.pm
rt/lib/RT/URI.pm
rt/lib/RT/URI/base.pm
rt/lib/RT/URI/fsck_com_rt.pm
rt/lib/t/regression/06-mime_decoding.t [new file with mode: 0644]
rt/lib/t/regression/06mailgateway.t
rt/lib/t/regression/22search_tix_by_txn.t
rt/lib/t/regression/23-web_attachments.t [new file with mode: 0644]
rt/sbin/rt-setup-database.in
rt/sbin/rt-test-dependencies.in

index a01bc89..c61acac 100644 (file)
@@ -1,9 +1,667 @@
 ------------------------------------------------------------------------
-r4386 | jesse | 2006-01-12 10:52:27 -0500 (Thu, 12 Jan 2006) | 1 line
+r6239 | jesse | 2006-10-19 21:18:39 -0400 (Thu, 19 Oct 2006) | 1 line
 Changed paths:
-   A /rt/tags/3.4.5 (from /rt/branches/3.4-RELEASE:4385)
+   A /rt/tags/3.4.6 (from /rt/branches/3.4-RELEASE:6238)
+
+Tagged as 3.4.6 by svn RelEng 1.0
+------------------------------------------------------------------------
+r6238 | jesse | 2006-10-19 21:16:44 -0400 (Thu, 19 Oct 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/releng.cnf
+
+ r28958@pinglin:  jesse | 2006-10-19 21:16:43 -0400
+  * 3.4.6
+
+------------------------------------------------------------------------
+r6153 | jesse | 2006-10-04 03:42:12 -0400 (Wed, 04 Oct 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/releng.cnf
+
+
+------------------------------------------------------------------------
+r6135 | ruz | 2006-09-30 17:38:39 -0400 (Sat, 30 Sep 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Record.pm
+
+* there is code exists that call My::Class->_ClassAccessible
+------------------------------------------------------------------------
+r5943 | jesse | 2006-09-15 15:31:25 -0400 (Fri, 15 Sep 2006) | 5 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email/Auth/MailFrom.pm
+
+ r27507@pinglin:  jesse | 2006-09-15 20:30:47 +0100
+ [mail gateway] Todd Chapman discovered a case where RT's mail gateway would default to the RT::SystemUser if no valid from header were found. This could allow a malicious user to create tickets or reply to tickets, but not to gain access to data.
+
+------------------------------------------------------------------------
+r5858 | ruz | 2006-09-04 18:09:30 -0400 (Mon, 04 Sep 2006) | 7 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm
+
+::OldValue and ::NewValue
+* don't load object if {Old,New}Reference is false value
+** this is hitting some cache issues and could return "random" result
+   which brakes tickets' history.
+
+Thanks to Joshua Speicher.
+
+------------------------------------------------------------------------
+r5857 | ruz | 2006-09-04 15:30:28 -0400 (Mon, 04 Sep 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Record.pm
+
+* redo search if we have deleted entries in collection
+------------------------------------------------------------------------
+r5856 | ruz | 2006-09-04 15:17:14 -0400 (Mon, 04 Sep 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm
+
+* split function ProcessObjectCustomFieldUpdates into two
+* call RedoSearch on object's custom fields values collection
+  after {Add,Delete}CustomFieldValues operations
+------------------------------------------------------------------------
+r5850 | ruz | 2006-09-04 12:49:12 -0400 (Mon, 04 Sep 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldSelect
+
+* drop uninit warning
+------------------------------------------------------------------------
+r5849 | ruz | 2006-09-04 12:32:29 -0400 (Mon, 04 Sep 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditCustomFields
+
+* drop unused variable
+* init index($i) with 0 to avoid warnings
+------------------------------------------------------------------------
+r5829 | ruz | 2006-08-30 16:12:48 -0400 (Wed, 30 Aug 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/I18N.pm
+
+* typo
+------------------------------------------------------------------------
+r5822 | ruz | 2006-08-29 15:10:01 -0400 (Tue, 29 Aug 2006) | 8 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/I18N.pm
+   A /rt/branches/3.4-RELEASE/lib/t/regression/06-mime_decoding.t
+
+* fix decoding of the MIME fields, this should fix:
+** problems with non-ascii names of attachments
+** problems with partly encoded fields with '=' chars
+   in not encoded parts, for example:
+
+X-MyHeader: key="plain"; key="=?encoded?="
+X-MyHeader: key="=?encoded?="; key="plain"
+
+------------------------------------------------------------------------
+r5821 | ruz | 2006-08-29 13:07:03 -0400 (Tue, 29 Aug 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm
+
+* get rid of unint warnings
+* make a log message shorter to be more readable
+------------------------------------------------------------------------
+r5820 | ruz | 2006-08-29 13:03:36 -0400 (Tue, 29 Aug 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/ParseFormat
+
+* default title to empty string as we compare it with 'NEWLINE' string
+  in several places, drops uninit warnings
+------------------------------------------------------------------------
+r5819 | ruz | 2006-08-29 12:59:30 -0400 (Tue, 29 Aug 2006) | 7 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+
+* Code:
+  $cf->Load(...)
+  $field = $cf->id;
+  unless( $field =~ /^\d+$/ )...
+  may produce unint warning if field wasn't loaded,
+  use "unless( $cf->id )" instead as we do everywhere
+
+------------------------------------------------------------------------
+r5818 | ruz | 2006-08-27 12:34:52 -0400 (Sun, 27 Aug 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowBasics
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowDates
+
+* add additional classes to records in tables with ticket's properties
+** so it's possible to change visiual appearance of different fields
+   like dates, queue, priority status and other
+------------------------------------------------------------------------
+r5779 | ruz | 2006-08-16 18:58:46 -0400 (Wed, 16 Aug 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm
+
+* allow user to add zero CF values
+------------------------------------------------------------------------
+r5778 | ruz | 2006-08-16 18:56:58 -0400 (Wed, 16 Aug 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFields
+
+* display one value without html lists
+------------------------------------------------------------------------
+r5777 | ruz | 2006-08-16 18:55:37 -0400 (Wed, 16 Aug 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowSummary
+
+* add LeftColumn and RightColumn callbacks to the summary element
+------------------------------------------------------------------------
+r5669 | ruz | 2006-07-28 12:06:56 -0400 (Fri, 28 Jul 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/releng.cnf
+
+* bump 3.4.6rc1
+------------------------------------------------------------------------
+r5624 | jesse | 2006-07-20 13:48:07 -0400 (Thu, 20 Jul 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowHistory
+
+ r14229@pinglin:  jesse | 2006-07-20 10:47:51 -0700
+ * The new history ordering feature was backported backwards.
+
+------------------------------------------------------------------------
+r5616 | jesse | 2006-07-19 20:40:57 -0400 (Wed, 19 Jul 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm
+
+ r14217@pinglin:  jesse | 2006-07-19 17:39:08 -0700
+ * crit was being called on the wrong object. Thanks to Todd Chapman 
+
+------------------------------------------------------------------------
+r5570 | kevinr | 2006-07-13 16:21:31 -0400 (Thu, 13 Jul 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Condition/Generic.pm
+
+ r14836@sad-girl-in-snow:  kevinr | 2006-07-13 16:17:43 -0400
+ * The RT::Condition::Generic docs were wrong... fixed.
+
+------------------------------------------------------------------------
+r5534 | ruz | 2006-07-06 11:19:46 -0400 (Thu, 06 Jul 2006) | 11 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/bin/rt-crontool.in
+
+rt-crontool
+* add --transaction argument with two possible values: 'first' and 'last'
+* add --transaction-type argument to allow users select type of transactions
+** these transactions would be passed to scrips for processing, so users
+   can use conditions, actions and templates that check or use properties of
+   transaction
+
+* also some existant actions, conditions and templates require scrip or
+  scrip action objects to process normally, as we have no these objects
+  available we now pass void (not loaded) objects. This change would allow
+  users to use notify actions with crontool.
+------------------------------------------------------------------------
+r5522 | ruz | 2006-07-04 01:39:21 -0400 (Tue, 04 Jul 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT.pm.in
+
+* we never should call exit from libs
+------------------------------------------------------------------------
+r5521 | ruz | 2006-07-04 01:38:03 -0400 (Tue, 04 Jul 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/sbin/rt-setup-database.in
+
+* report error when couldn't create CF
+------------------------------------------------------------------------
+r5520 | ruz | 2006-07-04 01:36:46 -0400 (Tue, 04 Jul 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in
+
+* forgot to add option to config
+------------------------------------------------------------------------
+r5496 | ruz | 2006-06-30 16:09:08 -0400 (Fri, 30 Jun 2006) | 5 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowHistory
+
+Changes:
+* new config option $OldestTransactionsFirst that allow
+  administrator to reverse order of transactions on
+  history page
+
+------------------------------------------------------------------------
+r5482 | ruz | 2006-06-28 17:25:18 -0400 (Wed, 28 Jun 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+   M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t
+
+* add tests for unsafe mailgate commands
+* fix bugs that were introduced during Email.pm refactoring
+------------------------------------------------------------------------
+r5480 | ruz | 2006-06-27 20:05:49 -0400 (Tue, 27 Jun 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Record.pm
+
+* minor formatting
+------------------------------------------------------------------------
+r5476 | ruz | 2006-06-27 17:21:07 -0400 (Tue, 27 Jun 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Link_Overlay.pm
+   M /rt/branches/3.4-RELEASE/lib/RT/Links_Overlay.pm
+   M /rt/branches/3.4-RELEASE/lib/RT/URI/base.pm
+   M /rt/branches/3.4-RELEASE/lib/RT/URI/fsck_com_rt.pm
+
+* nothing special, small changes I'd changed during
+  the hunt over a bug
+------------------------------------------------------------------------
+r5400 | ruz | 2006-06-16 20:40:24 -0400 (Fri, 16 Jun 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+* not default mail plugins has been broken during last refactoring
+** move a code back into its scope
+** don't forget to store $_ in $Class when $_ matches ^RT::Interface::Email
+------------------------------------------------------------------------
+r5317 | ruz | 2006-05-30 16:13:02 -0400 (Tue, 30 May 2006) | 5 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+
+* If current user changes owner from somebody else to nobody user,
+  the action fails with "You can only reassign tickets that you own
+  or that are unowned", but we must change owner if he has no right
+  to own tickets in dest queue. Do it with Force and with SystemUser
+  context.
+------------------------------------------------------------------------
+r5315 | ruz | 2006-05-28 07:19:20 -0400 (Sun, 28 May 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowRequestor
+
+* Use "Requestor.id = $requestor->id" search instead of search by email address
+  as latter is not indexed
+------------------------------------------------------------------------
+r5310 | ruz | 2006-05-26 20:39:49 -0400 (Fri, 26 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/URI.pm
+
+* when we could parse URI, for example object doesn't exist
+  fallback to RT::URI::base resolver, so $uri->IsLocal and
+  other methods wouldn't die but return undef
+------------------------------------------------------------------------
+r5268 | jesse | 2006-05-19 17:17:41 -0400 (Fri, 19 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+ r13935@hualien:  jesse | 2006-05-19 17:17:27 -0400
+ * There were divergent copies of this code. The EmailParser code was more correct
+
+------------------------------------------------------------------------
+r5257 | ruz | 2006-05-18 21:53:40 -0400 (Thu, 18 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+
+* minor
+------------------------------------------------------------------------
+r5256 | ruz | 2006-05-18 21:45:58 -0400 (Thu, 18 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+* allow to complete actions in mail plugins
+------------------------------------------------------------------------
+r5249 | ruz | 2006-05-18 12:17:47 -0400 (Thu, 18 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+
+* add bug comment
+------------------------------------------------------------------------
+r5238 | ruz | 2006-05-16 18:39:59 -0400 (Tue, 16 May 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+
+* really noisy warning
+  *NOTE* that option we use is not described in config
+------------------------------------------------------------------------
+r5218 | ruz | 2006-05-12 20:31:33 -0400 (Fri, 12 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm
+   M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm
+   M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm
+
+* get rid of "masks earlier declaration" warnings
+------------------------------------------------------------------------
+r5217 | ruz | 2006-05-12 17:02:54 -0400 (Fri, 12 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm
+   M /rt/branches/3.4-RELEASE/lib/t/regression/22search_tix_by_txn.t
+
+* use SetToMidnight( Timezone => 'server' ) to calc start and end of the day
+------------------------------------------------------------------------
+r5216 | ruz | 2006-05-12 16:54:41 -0400 (Fri, 12 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Date.pm
+
+* add Timezone argument in SetToMidnight
+------------------------------------------------------------------------
+r5209 | ruz | 2006-05-11 18:31:58 -0400 (Thu, 11 May 2006) | 10 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Display.html
+
+* user do next steps:
+    1) open ticket #1
+    2) click reply
+    3) upload attachment
+    4) open ticket #2 in another browser window
+    5) send reply to the ticket #1
+  RT looses uploaded attachment due to step 4) as RT tries
+  to add attchement to the ticket #2 and drops them from session.
+  As solution don't ProcessTicketMessage if there is attachments,
+  but only if there is real update message.
+------------------------------------------------------------------------
+r5208 | ruz | 2006-05-11 18:24:17 -0400 (Thu, 11 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+* if ( not $xxx || $xxx->foo ) is equivalent to
+  if ( not ( $xxx || $xxx->foo ) ) due to perl5 rules
+  which is not expected behaviour
+------------------------------------------------------------------------
+r5207 | ruz | 2006-05-11 16:56:24 -0400 (Thu, 11 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm
+
+* more checks on attachments processing
+------------------------------------------------------------------------
+r5206 | ruz | 2006-05-11 16:48:53 -0400 (Thu, 11 May 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm
+
+* return values checking and more logging on errors
+------------------------------------------------------------------------
+r5187 | jesse | 2006-05-09 00:48:10 -0400 (Tue, 09 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+ r13332@hualien:  jesse | 2006-05-09 00:47:49 -0400
+ * Mismatched parens
+
+------------------------------------------------------------------------
+r5186 | jesse | 2006-05-08 22:56:20 -0400 (Mon, 08 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/REST/1.0/NoAuth/mail-gateway
+
+ r13330@hualien:  jesse | 2006-05-08 22:55:56 -0400
+  * Reed Loden caught a perltidy error that, somewhat terrifiyingly, was still a valid mason page
+
+------------------------------------------------------------------------
+r5185 | jesse | 2006-05-08 22:32:19 -0400 (Mon, 08 May 2006) | 4 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/REST/1.0/NoAuth/mail-gateway
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+ r13315@hualien:  jesse | 2006-05-08 22:31:30 -0400
+ * Mail gateway refactoring to make added functioanlity a bit easier. 
+   No (intentional) functional changes.
+
+------------------------------------------------------------------------
+r5184 | jesse | 2006-05-08 22:32:10 -0400 (Mon, 08 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm
+
+ r13314@hualien:  jesse | 2006-05-08 12:14:26 -0400
+ * Minor reformatting
+
+------------------------------------------------------------------------
+r5183 | jesse | 2006-05-08 22:31:56 -0400 (Mon, 08 May 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/Admin/Groups/index.html
+
+ r13313@hualien:  jesse | 2006-05-08 12:01:55 -0400
+  * Finding disabled groups should actually find them, now
+
+------------------------------------------------------------------------
+r5118 | jesse | 2006-04-25 22:43:31 -0400 (Tue, 25 Apr 2006) | 5 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/REST/1.0/search/ticket
+
+ r11882@hualien:  jesse | 2006-04-25 22:43:11 -0400
+ * Mark Eichin picked up that http://lists.fsck.com/pipermail/rt-devel/2004-August/006216.html had never been applied. 
+ rt ls -l broke because of it, if your RT server wasn't at / 
+
+------------------------------------------------------------------------
+r5116 | ruz | 2006-04-25 19:35:09 -0400 (Tue, 25 Apr 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/t/regression/23-web_attachments.t
+
+* get queue ID from page
+------------------------------------------------------------------------
+r5115 | ruz | 2006-04-25 19:24:45 -0400 (Tue, 25 Apr 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/SelectNewTicketQueue
+
+* (cond) && 'selected' outputs 0 if condition fails on my system 
+------------------------------------------------------------------------
+r5066 | ruz | 2006-04-24 20:21:32 -0400 (Mon, 24 Apr 2006) | 1 line
+Changed paths:
+   A /rt/branches/3.4-RELEASE/lib/t/regression/23-web_attachments.t
+
+* simple tests for Attachments manipulation from web interface
+------------------------------------------------------------------------
+r5065 | ruz | 2006-04-24 17:25:15 -0400 (Mon, 24 Apr 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm
+
+* convert only if $enc'oding contains something
+------------------------------------------------------------------------
+r5064 | ruz | 2006-04-24 16:42:43 -0400 (Mon, 24 Apr 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/SelfService/Create.html
+   M /rt/branches/3.4-RELEASE/html/Ticket/Create.html
+
+* max subject is 200 character long
+------------------------------------------------------------------------
+r5060 | jesse | 2006-04-24 10:49:40 -0400 (Mon, 24 Apr 2006) | 10 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/default
+
+ r11842@hualien:  jesse | 2006-04-24 10:49:13 -0400
+ The following patch adds the useful LastUpdated field to the fields
+ returned through the REST interface.
+ David - who starts to wonder if his patches are actually read by someone :-)
+ --
+ David Schweikert        | phone: +41 44 632 7019
+ System manager ISG.EE   | walk:  ETH Zentrum, ETL F24.1
+ ETH Zurich, Switzerland | web:   http://people.ee.ethz.ch/dws
+
+------------------------------------------------------------------------
+r5047 | ruz | 2006-04-17 20:40:06 -0400 (Mon, 17 Apr 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Ticket/Elements/PreviewScrips
+
+* check and report error to the logs
+------------------------------------------------------------------------
+r4924 | jesse | 2006-03-30 21:07:23 -0500 (Thu, 30 Mar 2006) | 7 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/config.layout
+
+ r10636@hualien:  jesse | 2006-03-31 11:06:57 +0900
+ RT-Ticket: 7398
+ RT-Status: resolved
+ RT-Update: correspond
+ * Added a "RH" RedHat layout option to config.layout  -- Paulo Matos
+
+------------------------------------------------------------------------
+r4847 | alexmv | 2006-03-28 15:50:07 -0500 (Tue, 28 Mar 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Record.pm
+
+ r11918@zoq-fot-pik:  chmrr | 2006-03-28 15:49:56 -0500
+  * Backport TXN fixes from 3.7 and 3.5
+
+------------------------------------------------------------------------
+r4814 | jesse | 2006-03-23 22:40:37 -0500 (Thu, 23 Mar 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm
+
+ r10436@hualien:  jesse | 2006-03-23 22:40:25 -0500
+ * It helps when there aren't typos
+
+------------------------------------------------------------------------
+r4799 | jesse | 2006-03-23 01:37:59 -0500 (Thu, 23 Mar 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm
+
+ r30313@truegrounds:  jesse | 2006-03-23 01:36:27 -0500
+ * Better mp2 bulletproofing
+
+------------------------------------------------------------------------
+r4686 | jesse | 2006-03-04 17:47:46 -0500 (Sat, 04 Mar 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/default
+
+ r22962@truegrounds:  jesse | 2006-01-25 05:18:09 -0800
+ * Updated mandatory fields for ticket creation forms
+
+------------------------------------------------------------------------
+r4498 | alexmv | 2006-02-04 18:34:51 -0500 (Sat, 04 Feb 2006) | 8 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/html/Elements/QuickCreate
+
+ r8937@zoq-fot-pik:  chmrr | 2006-02-04 18:33:57 -0500
+ RT-Ticket: 7329
+ RT-Status: resolved
+ RT-Update: correspond
+  * Use SelectNewTicketQueue instead of SelectQueue
+
+------------------------------------------------------------------------
+r4497 | alexmv | 2006-02-04 18:34:45 -0500 (Sat, 04 Feb 2006) | 4 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/bin/webmux.pl.in
+
+ r8936@zoq-fot-pik:  chmrr | 2006-02-04 18:24:38 -0500
+  * Only rmtree if we have something to rm; keeps rmtree from
+ complaining about 'Not root path(s) specified'
+
+------------------------------------------------------------------------
+r4448 | kevinr | 2006-01-30 19:25:47 -0500 (Mon, 30 Jan 2006) | 7 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po
+
+ r10537@SAD-GIRL-IN-SNOW:  kevinr | 2006-01-30 19:20:52 -0500
+ RT-Ticket: 7289
+ RT-Status: resolved
+ RT-Update: correspond
+ Updated German translation (thanks to Thorsten Brumm)
+
+------------------------------------------------------------------------
+r4445 | jesse | 2006-01-25 07:50:07 -0500 (Wed, 25 Jan 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/bin/rt.in
+
+ r22960@truegrounds:  jesse | 2006-01-25 13:47:07 +0100
+ * a couple added lines of docs to the cli
+
+------------------------------------------------------------------------
+r4444 | jesse | 2006-01-25 07:11:16 -0500 (Wed, 25 Jan 2006) | 12 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/etc/schema.Oracle
+
+ r22958@truegrounds:  jesse | 2006-01-25 13:08:34 +0100
+ From: Joop van de Wege <JoopvandeWege@mococo.nl>
+ Message-Id: <20060125125248.1A97.JOOPVANDEWEGE@mococo.nl>
+ > There is atleast one problem that I have spotted and that is that
+ > schema.Oracle contains two empty lines in CREATE TABLE
+ > ObjectCustomFieldValues which don't belong there.
+ > That is the second set of errors you get. The first is an indication
+ > that an sequence with that name already exists in the schema of that
+ > Oracle users you're RT installing in.
+
+------------------------------------------------------------------------
+r4438 | jesse | 2006-01-24 07:49:37 -0500 (Tue, 24 Jan 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in
+
+ r22894@truegrounds:  jesse | 2006-01-24 13:44:05 +0100
+ * Note that our SQLite dependency is 1.0
+
+------------------------------------------------------------------------
+r4406 | alexmv | 2006-01-19 00:19:31 -0500 (Thu, 19 Jan 2006) | 1 line
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+
+
+------------------------------------------------------------------------
+r4405 | alexmv | 2006-01-19 00:19:24 -0500 (Thu, 19 Jan 2006) | 3 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE
+   M /rt/branches/3.4-RELEASE/etc/schema.mysql
+
+ r8697@zoq-fot-pik:  chmrr | 2006-01-19 00:18:21 -0500
+  * Drop the one index that is too long for mysql 5 (curse you, unicode!)
+
+------------------------------------------------------------------------
+r4399 | ruz | 2006-01-18 16:31:46 -0500 (Wed, 18 Jan 2006) | 5 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Template_Overlay.pm
+
+* CurrentUserHasQueueRight handles global templates natively
+  we don't need to check queue value
+* return error message from _ParseContent
+* check error status in Parser more accurate
+
+------------------------------------------------------------------------
+r4398 | ruz | 2006-01-18 16:28:41 -0500 (Wed, 18 Jan 2006) | 6 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm
+
+* handle SIGPIPE, could happen if sendmail closes pipe before
+  we output all message
+* handle SIGCHLD with default handler to get exit status from sendmail
+* handle errors in 'close', system errors or sendmail exit with error
+* only send warn on the error exit status
+
+------------------------------------------------------------------------
+r4397 | ruz | 2006-01-18 16:26:31 -0500 (Wed, 18 Jan 2006) | 2 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/ParseFormat
+
+* load and precompile only reqexp we need
+
+------------------------------------------------------------------------
+r4396 | ruz | 2006-01-18 16:15:46 -0500 (Wed, 18 Jan 2006) | 7 lines
+Changed paths:
+   M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch
+   M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm
+
+* in _EnumLimit load referenced object only if value
+  is defined and is not number, this could safe several
+  fetches from caches or in worst case from DB
+* use this advantage in Quicksearch element,
+  change in load time should be noticable on the systems
+  with many queues
 
-Tagged as 3.4.5 by svn RelEng 1.0
 ------------------------------------------------------------------------
 r4385 | jesse | 2006-01-12 10:48:22 -0500 (Thu, 12 Jan 2006) | 3 lines
 Changed paths:
index 76b08c3..0cfc4a9 100644 (file)
@@ -75,19 +75,28 @@ unless ( $CurrentUser->Id ) {
 }
 
 my ( $search, $condition, $action, $search_arg, $condition_arg, $action_arg,
-     $template_id, $help, $verbose );
-GetOptions( "search=s"        => \$search,
-            "search-arg=s"    => \$search_arg,
-            "condition=s"     => \$condition,
-            "condition-arg=s" => \$condition_arg,
-            "action-arg=s"    => \$action_arg,
-            "action=s"        => \$action,
-           "template-id=s"   => \$template_id,
-            "help"            => \$help,
-            "verbose|v"       => \$verbose );
+     $template_id, $transaction, $transaction_type, $help, $verbose );
+GetOptions( "search=s"           => \$search,
+            "search-arg=s"       => \$search_arg,
+            "condition=s"        => \$condition,
+            "condition-arg=s"    => \$condition_arg,
+            "action-arg=s"       => \$action_arg,
+            "action=s"           => \$action,
+            "template-id=s"      => \$template_id,
+            "transaction=s"      => \$transaction,
+            "transaction-type=s" => \$transaction_type,
+            "help"               => \$help,
+            "verbose|v"          => \$verbose );
 
 help() if $help or not $search or not $action;
 
+$transaction ||= 'first';
+unless ( $transaction =~ /^(first|last)$/i ) {
+    print STDERR loc("--transaction argument could be only 'first' or 'last'");
+    exit 1;
+}
+$transaction = lc($transaction) eq 'first'? 'ASC': 'DESC';
+
 # We _must_ have a search object
 load_module($search);
 load_module($action)    if ($action);
@@ -99,6 +108,8 @@ if ($template_id) {
     $template_obj = RT::Template->new($CurrentUser);
     $template_obj->Load($template_id);
 }
+my $void_scrip = RT::Scrip->new( $CurrentUser );
+my $void_scrip_action = RT::ScripAction->new( $CurrentUser );
 
 #At the appointed time:
 
@@ -119,11 +130,20 @@ my $tickets = $search->TicketsObj;
 while ( my $ticket = $tickets->Next() ) {
     print $ticket->Id() . ": " if ($verbose);
 
+    my $transaction = get_transaction($ticket);
+    print loc("Using transaction #[_1]...", $transaction->id)
+        if $verbose && $transaction;
+
     # perform some more advanced check
     if ($condition) {
-        my $condition_obj = $condition->new( TicketObj => $ticket,
-                                             Argument  => $condition_arg,
-                                             CurrentUser => $CurrentUser );
+        my $condition_obj = $condition->new(
+            TransactionObj => $transaction,
+            TicketObj      => $ticket,
+            ScripObj       => $void_scrip,
+            TemplateObj    => $template_obj,
+            Argument       => $condition_arg,
+            CurrentUser    => $CurrentUser,
+        );
 
         # if the condition doesn't apply, get out of here
 
@@ -133,10 +153,13 @@ while ( my $ticket = $tickets->Next() ) {
 
     #prepare our action
     my $action_obj = $action->new(
-        TicketObj   => $ticket,
-        TemplateObj => $template_obj,
-        Argument    => $action_arg,
-        CurrentUser => $CurrentUser
+        TicketObj      => $ticket,
+        TransactionObj => $transaction,
+        TemplateObj    => $template_obj,
+        Argument       => $action_arg,
+        ScripObj       => $void_scrip,
+        ScripActionObj => $void_scrip_action,
+        CurrentUser    => $CurrentUser,
     );
 
     #if our preparation, move onto the next ticket
@@ -148,6 +171,26 @@ while ( my $ticket = $tickets->Next() ) {
     print loc("Action committed.\n") if ($verbose);
 }
 
+=head2 get_transaction
+
+Takes ticket and returns its transaction acording to command
+line arguments C<--transaction> and <--transaction-type>.
+
+=cut
+
+sub get_transaction {
+    my $ticket = shift;
+    my $txns = $ticket->Transactions;
+    $txns->OrderByCols(
+        { FIELD => 'Created', ORDER => $transaction },
+        { FIELD => 'id', ORDER => $transaction },
+    );
+    $txns->Limit( FIELD => 'Type', VALUE => $transaction_type )
+        if $transaction_type;
+    $txns->RowsPerPage(1);
+    return $txns->First;
+}
+
 # {{{ load_module 
 
 =head2 load_module
@@ -207,6 +250,15 @@ sub help {
       . loc( "[_1] - An argument to pass to [_2]", "--action-argument", "--action" )
       . "\n";
     print "    "
+      . loc( "[_1] - Specify id of the template you want to use", "--template-id" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify if you want to use either 'first' or 'last' tarnsaction", "--transaction" )
+      . "\n";
+    print "    "
+      . loc( "[_1] - Specify the type of a transaction you want to use", "--transaction-type" )
+      . "\n";
+    print "    "
       . loc( "[_1] - Output status updates to STDOUT", "--verbose" ) . "\n";
     print "\n";
     print "\n";
index d12460b..c80577f 100644 (file)
@@ -1673,13 +1673,15 @@ Text:
         -t type         Specifies object type.
         -f a,b,c        Restrict the display to the specified fields.
         -S var=val      Submits the specified variable with the request.
-
+        -v              Verbose display
     Examples:
 
         rt show -t ticket -f id,subject,status 1-3
         rt show ticket/3/attachments/29
         rt show ticket/3/attachments/29/content
         rt show ticket/1-3/links
+        rt show ticket/3/history
+        rt show -v ticket/3/history
         rt show -t user 2
 
 --
index 73b1014..4cc4d61 100644 (file)
@@ -95,7 +95,8 @@ if ($ENV{'MOD_PERL'} && !$RT::DevelMode) {
     
     use File::Path qw( rmtree );
     use File::Glob qw( bsd_glob );
-    rmtree([ bsd_glob("$RT::MasonDataDir/obj/*") ], 0, 1);
+    my @files = bsd_glob("$RT::MasonDataDir/obj/*");
+    rmtree([ @files ], 0, 1) if @files;
 }
 
 sub handler {
index b1c5bba..de6576b 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # From configure.ac Revision: 3739 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for RT 3.4.5.
+# Generated by GNU Autoconf 2.59 for RT 3.4.6.
 #
 # Report bugs to <rt-bugs@fsck.com>.
 #
@@ -270,8 +270,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='RT'
 PACKAGE_TARNAME='rt'
-PACKAGE_VERSION='3.4.5'
-PACKAGE_STRING='RT 3.4.5'
+PACKAGE_VERSION='3.4.6'
+PACKAGE_STRING='RT 3.4.6'
 PACKAGE_BUGREPORT='rt-bugs@fsck.com'
 
 ac_unique_file="lib/RT.pm.in"
@@ -729,7 +729,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures RT 3.4.5 to adapt to many kinds of systems.
+\`configure' configures RT 3.4.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -786,7 +786,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of RT 3.4.5:";;
+     short | recursive ) echo "Configuration of RT 3.4.6:";;
    esac
   cat <<\_ACEOF
 
@@ -927,7 +927,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-RT configure 3.4.5
+RT configure 3.4.6
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -941,7 +941,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by RT $as_me 3.4.5, which was
+It was created by RT $as_me 3.4.6, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -1283,7 +1283,7 @@ rt_version_major=3
 
 rt_version_minor=4
 
-rt_version_patch=5
+rt_version_patch=6
 
 test "x$rt_version_major" = 'x' && rt_version_major=0
 test "x$rt_version_minor" = 'x' && rt_version_minor=0
@@ -2523,7 +2523,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by RT $as_me 3.4.5, which was
+This file was extended by RT $as_me 3.4.6, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -2578,7 +2578,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-RT config.status 3.4.5
+RT config.status 3.4.6
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
index 0d38ba4..3f33c3b 100644 (file)
@@ -3,11 +3,11 @@ dnl
 dnl Process this file with autoconf to produce a configure script
 dnl
 dnl Embed in generated ./configure script the following CVS info:
-AC_REVISION($Revision: 1.1.1.6 $)dnl
+AC_REVISION($Revision: 1.1.1.6.2.1 $)dnl
 
 dnl Setup autoconf
 AC_PREREQ(2.53)
-AC_INIT(RT, [3.4.5], [rt-bugs@fsck.com])
+AC_INIT(RT, [3.4.6], [rt-bugs@fsck.com])
 AC_CONFIG_SRCDIR([lib/RT.pm.in])
 
 dnl Extract RT version number components
index 10d46eb..64fcf00 100644 (file)
@@ -391,6 +391,11 @@ Set($WebFlushDbCacheEveryRequest, '1');
 
 Set($MaxInlineBody, 13456);
 
+# By default, RT shows newest transactions at the bottom of the ticket
+# history page, if you want see them at the top set this to '0'.
+
+Set($OldestTransactionsFirst, '1');
+
 # $MyTicketsLength is the length of the owned tickets table on the
 # front page. For some people, the default of 10 isn't big enough
 # to get a feel for how much work needs to be done before you get
index 60f1aba..b7d53f8 100755 (executable)
@@ -58,7 +58,6 @@ CREATE TABLE Links (
   PRIMARY KEY (id)
 ) TYPE=InnoDB;
 
-CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type) ;
 CREATE INDEX Links2 ON Links (Base,  Type) ;
 CREATE INDEX Links3 ON Links (Target,  Type) ;
 CREATE INDEX Links4 ON Links (Type,LocalBase);
index 0734406..50857e5 100644 (file)
@@ -78,6 +78,10 @@ $Groups->LimitToUserDefinedGroups();
 my $title = loc('Select a group');
 my $caption;
 
+if ($FindDisabledGroups) {
+    $Groups->FindAllRows();
+}
+
 if (length $GroupString) {
     $caption = loc("Groups matching search criteria");
     if ($GroupField =~ /^CustomField-(\d+)/) {
index 57434ef..be56dea 100644 (file)
@@ -48,7 +48,7 @@ $Format
 </%ARGS>
 
 <%init>
-use Regexp::Common;
+use Regexp::Common qw/delimited/;
 my @Columns;
 
 while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
@@ -59,7 +59,9 @@ while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
         substr($col,-1,1) = "";
     }
 
-    my $colref;
+    my $colref = {
+        title => '',
+    };
 
     if ( $col =~ s!/STYLE:([^/]+)!!io ) {
         $colref->{'style'} = $1;
@@ -88,7 +90,7 @@ while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) {
         $colref->{'attribute'} = $col;
     }
     
-    if ( !$colref->{'title'} && grep { /^__(.*?)__$/io }
+    if ( !$colref->{'title'} && grep { /^__(.+?)__$/io }
         @{ $colref->{'output'} } )
     {   
         $colref->{'title'}     = $1;
index 2a2a64a..5dd4d0d 100644 (file)
@@ -51,7 +51,7 @@
 % while ($CFVs and my $value = $CFVs->Next ) {
         <option value="<%$value->Name%>" 
 % if ($Values) {
-            <% $Values->HasEntry($value->Name) && ($selected = 1) && 'SELECTED' %>
+            <% ($Values->HasEntry($value->Name)||'') && ($selected = 1) && 'SELECTED' %>
 % } elsif ($Default) {
             <% (ref $Default ? (grep {$_ eq $value->Name} @{$Default}) : ($Default eq $value->Name))
                 && ($selected = 1) && 'SELECTED' %>
index 0b97121..8fdce4c 100644 (file)
@@ -52,7 +52,7 @@
 <font size="-2"><&|/l&>Subject</&>:<br><input size="30" name="Subject"></font>
 </td>
 <td>
-<font size="-2"><&|/l&>Queue</&>:<br><& /Elements/SelectQueue, Name => 'Queue', ShowNullOption => 0 &></font>
+<font size="-2"><&|/l&>Queue</&>:<br><& /Elements/SelectNewTicketQueue, Name => 'Queue' &></font>
 </td>
 <td>
 <font size="-2"><&|/l&>Owner</&>:<br>
index d54f72e..5f1af0f 100644 (file)
@@ -57,12 +57,10 @@ my $i;
 while (my $queue = $Queues->Next) {
   next unless ($queue->CurrentUserHasRight('ShowTicket'));
 
-  my $name = $queue->Name;
-  $name =~ s|(['\\])|\\$1|g;
-  
-  my $new_q = "Queue = '$name' AND Status = 'new'";
-  my $open_q = "Queue = '$name' AND Status = 'open'";
-  my $all_q = "Queue = '$name' AND (Status = 'open' OR Status = 'new')";
+  my $qid = $queue->Id;
+  my $new_q = "Queue = '$qid' AND Status = 'new'";
+  my $open_q = "Queue = '$qid' AND Status = 'open'";
+  my $all_q = "Queue = '$qid' AND (Status = 'open' OR Status = 'new')";
 
   $Tickets->FromSQL($open_q);
   my $open = $Tickets->Count();
index d47b58a..51b89b2 100644 (file)
@@ -48,7 +48,7 @@
 % foreach my $queue (@{$session{'create_in_queues'}}) {
 <OPTION 
     VALUE="<%$queue->{'id'}%>" 
-    <%$Default && ($queue->{'id'} == $Default) && 'SELECTED'%>>
+    <% $Default && $queue->{'id'} == $Default ? 'SELECTED': ''%>>
 <%$queue->{'Name'}%>
 %   if (($Verbose) and ($queue->{'Description'}) ){
 (<%$queue->{'Description'}%>)
index 9861841..199fe36 100644 (file)
 %# 
 %# END BPS TAGGED BLOCK }}}
 <table>
-% my @entry_fields;
-% while (my $CustomField = $CustomFields->Next()) {
-% my $Values = $Object->CustomFieldValues($CustomField->Id);
+% while ( my $CustomField = $CustomFields->Next ) {
+% my $Values = $Object->CustomFieldValues( $CustomField->Id );
+% my $count = $Values->Count;
   <tr>
-    <td class="label"><%$CustomField->Name%>:</td>
+    <td class="label"><% $CustomField->Name %>:</td>
     <td class="value">
+% unless ( $count ) {
+<i><&|/l&>(no value)</&></i>
+% } elsif ( $count == 1 ) {
+%   $print_value->( $CustomField, $Values->First );
+% } else {
 <ul>
-% while (my $Value = $Values->Next()) {
-<li>
-% my $comp = "ShowCustomField".$CustomField->Type;
-% if ($m->comp_exists($comp)) {
-<& $comp, Object => $Value &>
-%   } else {
-<%$Value->Content%>
-%   }
-</li>
-% }
-% unless ($Values->Count()) {
-<li><i><&|/l&>(no value)</&></i></li>
+% while ( my $Value = $Values->Next ) {
+<li><% $print_value->( $CustomField, $Value ) |n %></li>
 % }
 </ul>
+% }
     </td>
   </tr>
 % }
 </table>
 <%INIT>
 my $CustomFields = $Object->CustomFields;
- $m->comp('/Elements/Callback', _CallbackName => 'MassageCustomFields',
+$m->comp('/Elements/Callback', _CallbackName => 'MassageCustomFields',
                                 CustomFields => $CustomFields);
 
+my $print_value = sub {
+    my ($cf, $value) = @_;
+    my $comp = "ShowCustomField". $cf->Type;
+    if ( $m->comp_exists( $comp ) ) {
+        $m->comp( $comp, Object => $value );
+    } else {
+        $m->print( $value->Content );
+    }
+};
+
 </%INIT>
 <%ARGS>
 $Object => undef
index 78f6c95..7d515e5 100644 (file)
@@ -57,7 +57,7 @@ my @comments;
 my ($c, $o, $k, $e) = ("", [], {}, 0);
 my %data   = %$changes;
 my $ticket = new RT::Ticket $session{CurrentUser};
-my @dates  = qw(Created Starts Started Due Resolved Told);
+my @dates  = qw(Created Starts Started Due Resolved Told LastUpdated);
 my @people = qw(Requestors Cc AdminCc);
 my @create = qw(Queue Requestor Subject Cc AdminCc Owner Status Priority
                 InitialPriority FinalPriority TimeEstimated TimeWorked
@@ -95,7 +95,7 @@ else {
         $starts->SetToNow;
 
         return [
-            "# Required: Queue, Requestor, Subject",
+            "# Required: id, Queue",
             [ qw(id Queue Requestor Subject Cc AdminCc Owner Status Priority
                  InitialPriority FinalPriority TimeEstimated Starts Due Text) ],
             {
index 5252c19..65d5550 100644 (file)
@@ -52,26 +52,30 @@ $action => "correspond"
 $ticket => undef
 </%ARGS>
 <%init>
-use RT::Interface::Email
+use RT::Interface::Email ();    # It's an exporter, but we don't care
 $r->content_type('text/plain; charset=utf-8');
 $m->error_format('text');
-my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway(\%ARGS);
- if ($status == -75 ) {
-$m->out("temporary failure - ". $error);
- }
-    elsif ($status == 1) {
-$m->out('ok');
-        if ( $Ticket->Id ) {
-$m->out('Ticket: '. $Ticket->Id);
-$m->out('Queue: '. $Ticket->QueueObj->Name );
-$m->out('Owner: '. $Ticket->OwnerObj->Name);
-$m->out('Status: '. $Ticket->Status );
-$m->out('Subject: '. $Ticket->Subject );
-$m->out('Requestor: '. $Ticket->Requestors->MemberEmailAddressesAsString );
-        }
- }   else { 
-$m->out('not ok - '.$error);
- }
-
+my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway( \%ARGS );
+if ( $status == 1 ) {
+  $m->out('ok');
+  if ( $Ticket->Id ) {
+    $m->out( 'Ticket: ' . $Ticket->Id );
+    $m->out( 'Queue: ' . $Ticket->QueueObj->Name );
+    $m->out( 'Owner: ' . $Ticket->OwnerObj->Name );
+    $m->out( 'Status: ' . $Ticket->Status );
+    $m->out( 'Subject: ' . $Ticket->Subject );
+    $m->out(
+      'Requestor: ' . $Ticket->Requestors->MemberEmailAddressesAsString );
+  }
+}
+else {
+  $RT::Logger->error( "Could not record email: " . $error );
+  if ( $status == -75 ) {
+    $m->out( "temporary failure - " . $error );
+  }
+  else {
+    $m->out( 'not ok - ' . $error );
+  }
+}
 $m->abort();
 </%init>
index d0ab59e..0990fd6 100644 (file)
@@ -123,7 +123,7 @@ while (my $ticket = $tickets->Next) {
     }
     else {
        my $id = $ticket->Id;
-        my $d = $m->comp("$RT::WebPath/REST/1.0/Forms/ticket/default", id => $id, format => $format, fields => \%fields);
+        my $d = $m->comp("/REST/1.0/Forms/ticket/default", id => $id, format => $format, fields => \%fields);
         my ($c, $o, $k, $e) = @$d;
        push @output, [ $c, $o, $k ];
     }
index d60ae26..bfa7534 100644 (file)
@@ -79,7 +79,7 @@
 <&|/l&>Subject</&>:
 </TD>
 <TD class="value">
-<INPUT Name="Subject" SIZE=60 MAXSIZE=100 value="">
+<INPUT Name="Subject" SIZE=60 MAXSIZE=200 value="">
 </TD>
 </TR>
 <tr>
index b547242..fc4cc20 100644 (file)
 <&|/l&>Subject</&>:
 </TD>
 <TD class=value COLSPAN=5>
-<INPUT Name="Subject" SIZE=60 MAXSIZE=100 value="<%$ARGS{Subject} || ''%>">
+<INPUT Name="Subject" SIZE=60 MAXSIZE=200 value="<%$ARGS{Subject} || ''%>">
 </TD>
 </TR>
 <TR>
index dd4c093..908a7a9 100644 (file)
@@ -128,17 +128,19 @@ if ($ARGS{'id'} eq 'new') {
     }
 
     $ARGS{'UpdateContent'} =~ s/\r\n/\n/g if defined $ARGS{'UpdateContent'};
-    if ( $ARGS{'UpdateTimeWorked'} ||
-        $session{'Attachments'} || 
-        (   defined $ARGS{'UpdateContent'}
-             && $ARGS{'UpdateContent'} ne ''
-            && $ARGS{'UpdateContent'} ne "-- \n"
-            . $session{'CurrentUser'}->UserObj->Signature )) {
-       $ARGS{UpdateAttachments} = $session{'Attachments'};
-       ProcessUpdateMessage( ARGSRef   => \%ARGS,
-                             Actions   => \@Actions,
-                             TicketObj => $TicketObj );
-       delete $session{'Attachments'};
+    if ( $ARGS{'UpdateTimeWorked'} || (
+        defined $ARGS{'UpdateContent'}
+        && $ARGS{'UpdateContent'} ne ''
+           && $ARGS{'UpdateContent'} ne "-- \n"
+              . $session{'CurrentUser'}->UserObj->Signature ) )
+    {
+           $ARGS{UpdateAttachments} = $session{'Attachments'};
+           ProcessUpdateMessage(
+            ARGSRef   => \%ARGS,
+                       Actions   => \@Actions,
+                       TicketObj => $TicketObj,
+        );
+           delete $session{'Attachments'};
     }
     #Process status updates
     my @BasicActions = ProcessTicketBasics(ARGSRef => \%ARGS, TicketObj=>$TicketObj);
index 6ae188f..78da712 100644 (file)
@@ -48,8 +48,7 @@
 <td valign="top" width="50%">
 <table>
 
-% my @entry_fields;
-% my $i;
+% my $i = 0;
 % my $cfcount = $CustomFields->Count;
 %  $cfcount++ if ($cfcount % 2) ; # if we have an odd number of 
 % #custom fields, fudge it so we know where to put in the table break
index a3492b7..491f8e3 100755 (executable)
@@ -86,15 +86,19 @@ my ( $Transaction, $Description, $Object ) = $TicketObj->$action(
     TimeTaken    => $ARGS{'UpdateTimeWorked'},
     DryRun       => 1
 );
+unless ( $Transaction ) {
+    $RT::Logger->error("Coulfn't fire '$action' action: $Description");
+}
 
 
 my @non_recipients = $TicketObj->SquelchMailTo;
 </%init>
 <h2><&|/l&>This message will be sent to...</&></h2>
+% if ( $Object ) {
 <i><&|/l&>(Check boxes to disable notifications to the listed recipients)</&></i><br>
 % foreach my $scrip (@{$Object->Scrips->Prepared}) {
 % next unless $scrip->ActionObj->Action->isa('RT::Action::SendEmail');
-<b><%$scrip->Description%></b><br>
+<b><% $scrip->Description %></b><br>
 <&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)&>[_1] [_2] with template [_3]</&>
 <br>
 %foreach my $type qw(To Cc Bcc) {
@@ -110,8 +114,10 @@ my @non_recipients = $TicketObj->SquelchMailTo;
 <%$scrip->ActionObj->TemplateObj->MIMEObj->as_string%>
 </textarea>
 % }
-%}
-<br>
+% }
+% }
+<br />
+
 <h2><&|/l&>Messages about this ticket will not be sent to...</&></h2>
 <i><&|/l&>(Check boxes to enable notifications to the listed recipients)</&></i>
 <br>
index 00ed3cc..e5f09f6 100644 (file)
 %# END BPS TAGGED BLOCK }}}
 <table>
   <tr>
-    <td class="label"><&|/l&>Id</&>:</td>
-    <td class="value"><%$Ticket->Id %></td>
+    <td class="label id"><&|/l&>Id</&>:</td>
+    <td class="value id"><%$Ticket->Id %></td>
   </tr>
   <tr>
-    <td class="label"><&|/l&>Status</&>:</td>
-    <td class="value"><&|/l&><% $Ticket->Status%></&></td>
+    <td class="label status"><&|/l&>Status</&>:</td>
+    <td class="value status"><&|/l&><% $Ticket->Status%></&></td>
   </tr>
 % if ($Ticket->TimeEstimated) {
   <tr>
-    <td class="label"><&|/l&>Estimated</&>:</td>
-    <td class="value"><&|/l, $Ticket->TimeEstimated &>[_1] min</&></td>
+    <td class="label time estimated"><&|/l&>Estimated</&>:</td>
+    <td class="value time estimated"><&|/l, $Ticket->TimeEstimated &>[_1] min</&></td>
   </tr>
 % }
 % if ($Ticket->TimeWorked) {
   <tr>
-    <td class="label"><&|/l&>Worked</&>:</td>
-    <td class="value"><&|/l, $Ticket->TimeWorked &>[_1] min</&></td>
+    <td class="label time worked"><&|/l&>Worked</&>:</td>
+    <td class="value time worked"><&|/l, $Ticket->TimeWorked &>[_1] min</&></td>
   </tr>
 % }
   <tr>
-    <td class="label"><&|/l&>Left</&>:</td>
-    <td class="value"><&|/l, $Ticket->TimeLeft &>[_1] min</&></td>
+    <td class="label time left"><&|/l&>Left</&>:</td>
+    <td class="value time left"><&|/l, $Ticket->TimeLeft &>[_1] min</&></td>
   </tr>
   <tr>
-    <td class="label"><&|/l&>Priority</&>:</td>
-    <td class="value"><%$Ticket->Priority%>/<%$Ticket->FinalPriority %></td>
+    <td class="label priority"><&|/l&>Priority</&>:</td>
+    <td class="value priority"><%$Ticket->Priority%>/<%$Ticket->FinalPriority %></td>
   </tr>
   <tr>
-    <td class="label"><&|/l&>Queue</&>:</td>
-    <td class="value"><%$Ticket->QueueObj->Name%></td>
+    <td class="label queue"><&|/l&>Queue</&>:</td>
+    <td class="value queue"><%$Ticket->QueueObj->Name%></td>
   </tr>
 <& /Elements/Callback, _CallbackName => 'EndOfList', TicketObj => $Ticket, %ARGS &>
 </table>
index 2ccbb3f..322fafd 100644 (file)
 %# END BPS TAGGED BLOCK }}}
 <TABLE>
   <TR>
-    <TD class="label"><&|/l&>Created</&>:</TD>
-    <TD class="value"><% $Ticket->CreatedObj->AsString %></TD>
+    <TD class="label date created"><&|/l&>Created</&>:</TD>
+    <TD class="value date created"><% $Ticket->CreatedObj->AsString %></TD>
   </TR>
   <TR>
-    <TD class="label"><&|/l&>Starts</&>:</TD>
-    <TD class="value"><% $Ticket->StartsObj->AsString %></TD>
+    <TD class="label date starts"><&|/l&>Starts</&>:</TD>
+    <TD class="value date starts"><% $Ticket->StartsObj->AsString %></TD>
   </TR>
   <TR>
-    <TD class="label"><&|/l&>Started</&>:</TD>
-    <TD class="value"><% $Ticket->StartedObj->AsString %></TD>
+    <TD class="label date started"><&|/l&>Started</&>:</TD>
+    <TD class="value date started"><% $Ticket->StartedObj->AsString %></TD>
   </TR>
   <TR>
-    <TD class="label"><a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->id%>&Action=SetTold"><&|/l&>Last Contact</&></a>:</TD>
-    <TD class="value"><% $Ticket->ToldObj->AsString %></TD>
+    <TD class="label date told"><a href="<% $RT::WebPath %>/Ticket/Display.html?id=<% $Ticket->id %>&Action=SetTold"><&|/l&>Last Contact</&></a>:</TD>
+    <TD class="value date told"><% $Ticket->ToldObj->AsString %></TD>
   </TR>
   <TR>
-    <TD class="label"><&|/l&>Due</&>:</TD>
-    <TD class="value"><% $Ticket->DueObj->AsString  %></TD>
+    <TD class="label date due"><&|/l&>Due</&>:</TD>
+    <TD class="value date due"><% $Ticket->DueObj->AsString  %></TD>
   </TR>
   <TR>
-    <TD class="label"><&|/l&>Closed</&>:</TD>
-    <TD class="value"><% $Ticket->ResolvedObj->AsString  %></TD>
+    <TD class="label date resolved"><&|/l&>Closed</&>:</TD>
+    <TD class="value date resolved"><% $Ticket->ResolvedObj->AsString  %></TD>
   </TR>
   <TR>
-    <TD class="label"><&|/l&>Updated</&>:</TD>
-% my $UpdatedString = $Ticket->LastUpdated ? (loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)) : loc("Never");
+    <TD class="label date updated"><&|/l&>Updated</&>:</TD>
+% my $UpdatedString = $Ticket->LastUpdated ? loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) : loc("Never");
 % if ($UpdatedLink) {
-    <TD class="value"><A HREF="#lasttrans"><% $UpdatedString | h %></a></TD>
+    <TD class="value date updated"><A HREF="#lasttrans"><% $UpdatedString | h %></a></TD>
 % } else {
-    <TD class="value"><% $UpdatedString | h %></TD>
+    <TD class="value date updated"><% $UpdatedString | h %></TD>
 % }
   </TR>
 </TABLE>
index 75e3477..878e253 100644 (file)
@@ -136,8 +136,16 @@ if ($Tickets) {
 } else {
     $Transactions = $Ticket->Transactions;
 }
-my $i;
 
+
+my $OldestFirst = $RT::OldestTransactionsFirst? 'ASC': 'DESC';
+$Transactions->OrderByCols( { FIELD => 'Created',
+                              ORDER => $OldestFirst },
+                            { FIELD => 'id',
+                              ORDER => $OldestFirst },
+                          );
+
+my $i;
 $Attachments ||=  $m->comp('/Ticket/Elements/FindAttachments', Ticket => $Ticket, Tickets => $Tickets || undef);
 $AttachmentContent ||= $m->comp('/Ticket/Elements/LoadTextAttachments', Ticket => $Ticket);
 
index 421d38e..57bfa0e 100644 (file)
 my $rows = 10;
 my $people = $Ticket->Requestors->UserMembersObj;
 while (my $requestor=$people->Next) {
+next if $requestor->Privileged;
 my $name=$requestor->RealName || $requestor->EmailAddress;     
 my $tickets = RT::Tickets->new($session{'CurrentUser'});
-$tickets->LimitWatcher(TYPE => 'Requestor', VALUE => $requestor->EmailAddress );
-$tickets->LimitStatus( VALUE => 'open');
-$tickets->LimitStatus( VALUE => 'new');
+$tickets->FromSQL( "Requestor.id = ". $requestor->id ." AND (Status = 'open' OR Status = 'new')" );
 $tickets->RowsPerPage($rows);
-$tickets->OrderBy(FIELD => 'Priority',
-                 ORDER => 'DESC');
+$tickets->OrderBy(FIELD => 'Priority', ORDER => 'DESC');
 </%PERL>
 
-% unless ($requestor->Privileged) {
 <& /Elements/TitleBoxStart, 
        title => "<a class='inverse' href=\"$RT::WebPath/Admin/Users/Modify.html?id=".$requestor->id."\">".loc("More about [_1]", $name)."</a>" &>
 
@@ -80,7 +77,6 @@ $tickets->OrderBy(FIELD => 'Priority',
 
 <& /Elements/TitleBoxEnd &>
 
-% }
 %}
 <%ARGS>
 $Ticket=>undef
index 5a6e7e0..e2f3e71 100644 (file)
@@ -79,6 +79,9 @@
           <& /Elements/TitleBoxEnd &>
 
        <BR>
+
+    <& /Elements/Callback, %ARGS, _CallbackName => 'LeftColumn' &>
+
        </TD>
        <TD VALIGN=TOP WIDTH="50%" class="boxcontainer">
 
 
          <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &>
 
+    <& /Elements/Callback, %ARGS, _CallbackName => 'RightColumn' &>
 
        </TD>
       </TR>
index f7c882b..4d259b0 100644 (file)
@@ -293,12 +293,8 @@ $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];
     }
+    die $_[0];
 };
 
 # }}}
index 431b97c..1ebcb0c 100755 (executable)
@@ -253,12 +253,28 @@ sub SendMessage {
 
     if ( $RT::MailCommand eq 'sendmailpipe' ) {
         eval {
-            open( my $mail, "|$RT::SendmailPath $RT::SendmailArguments" ) || die $!;
+            # don't ignore CHLD signal to get proper exit code
+            local $SIG{'CHLD'} = 'DEFAULT';
+
+            my $mail;
+            unless( open $mail, "|$RT::SendmailPath $RT::SendmailArguments" ) {
+                die "Couldn't run $RT::SendmailPath: $!";
+            }
+
+            # if something wrong with $mail->print we will get PIPE signal, handle it
+            local $SIG{'PIPE'} = sub { die "$RT::SendmailPath closed pipe" };
             $MIMEObj->print($mail);
-            close($mail);
+
+            unless ( close $mail ) {
+                die "Close failed: $!" if $!; # system error
+                # sendmail exit statuses mostly errors with data not software
+                # TODO: status parsing: core dump, exit on signal or EX_*
+                $RT::Logger->warning( "$RT::SendmailPath exitted with status $?" );
+            }
         };
         if ($@) {
-            $RT::Logger->crit( $msgid . "Could not send mail. -" . $@ );
+            $RT::Logger->crit( $msgid . "Could not send mail: " . $@ );
+            return 0;
         }
     }
     else {
@@ -284,13 +300,12 @@ sub SendMessage {
         }
     }
 
-    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)) {
+        next unless my $addresses = $MIMEObj->head->get($_);
+        $success .= " $_: ". $addresses;
+    }
+    $success =~ s/\n//g;
 
     $self->RecordOutgoingMailTransaction($MIMEObj) if ($RT::RecordOutgoingEmail);
 
index fe189e3..d1f0ed4 100644 (file)
@@ -296,7 +296,7 @@ sub OriginalContent {
     eval {return( Encode::decode_utf8($content))} || return ($content);
   }
   
-  eval { Encode::from_to($content, 'utf8' => $enc);};
+  eval { Encode::from_to($content, 'utf8' => $enc) } if $enc;
   if ($@) {
        $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@);
   }
index cdde9ee..c38fc83 100755 (executable)
@@ -51,7 +51,7 @@
 =head1 SYNOPSIS
 
     use RT::Condition::Generic;
-    my $foo = new RT::Condition::IsApplicable
+    my $foo = RT::Condition::Generic->new
                TransactionObj => $tr, 
                TicketObj => $ti, 
                ScripObj => $scr, 
index 743c85c..07a953c 100644 (file)
@@ -366,7 +366,8 @@ sub AddValue {
         return (0, $self->loc('Permission Denied'));
     }
 
-    unless ($args{'Name'}) {
+    # allow zero value
+    if ( !defined $args{'Name'} || $args{'Name'} eq '' ) {
         return(0, $self->loc("Can't add a custom field value without a name"));
     }
        my $newval = RT::CustomFieldValue->new($self->CurrentUser);
@@ -876,10 +877,10 @@ sub AddToObject {
     if ( $ObjectCF->Id ) {
         return ( 0, $self->loc("That is already the current value") );
     }
-    my ( $id, $msg ) =
+    my ( $oid, $msg ) =
       $ObjectCF->Create( ObjectId => $id, CustomField => $self->Id );
 
-    return ( $id, $msg );
+    return ( $oid, $msg );
 }
 
 
@@ -911,9 +912,10 @@ sub RemoveFromObject {
     unless ( $ObjectCF->Id ) {
         return ( 0, $self->loc("This custom field does not apply to that object") );
     }
-    my ( $id, $msg ) = $ObjectCF->Delete;
+    # XXX: Delete doesn't return anything
+    my ( $oid, $msg ) = $ObjectCF->Delete;
 
-    return ( $id, $msg );
+    return ( $oid, $msg );
 }
 
 # {{{ AddValueForObject
index 620acc7..f951df3 100644 (file)
@@ -226,23 +226,28 @@ sub Set {
 
 # {{{ sub SetToMidnight 
 
-=head2 SetToMidnight
+=head2 SetToMidnight [Timezone => 'utc']
 
-Sets the date to midnight (at the beginning of the day) GMT
+Sets the date to midnight (at the beginning of the day).
 Returns the unixtime at midnight.
 
+Arguments:
+
+=over 4
+
+=item Timezone - Timezone context C<server> or C<UTC>
+
 =cut
 
 sub SetToMidnight {
     my $self = shift;
-    
-    use Time::Local;
-    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime($self->Unix);
-    $self->Unix(timegm (0,0,0,$mday,$mon,$year,$wday,$yday));
-    
+    my %args = ( Timezone => 'UTC', @_ );
+    if ( lc $args{'Timezone'} eq 'server' ) {
+        $self->Unix( Time::Local::timelocal( 0,0,0,(localtime $self->Unix)[3..7] ) );
+    } else {
+        $self->Unix( Time::Local::timegm( 0,0,0,(gmtime $self->Unix)[3..7] ) );
+    }
     return ($self->Unix);
-    
-    
 }
 
 
index 41cf497..29e4a8b 100644 (file)
@@ -497,7 +497,7 @@ sub _Create {
     # If we couldn't create a principal Id, get the fuck out.
     unless ($principal_id) {
         $RT::Handle->Rollback() unless ($args{'InsideTransaction'});
-        $self->crit( "Couldn't create a Principal on new user create. Strange things are afoot at the circle K" );
+        $RT::Logger->crit( "Couldn't create a Principal on new user create. Strange things are afoot at the circle K" );
         return ( 0, $self->loc('Could not create group') );
     }
 
index e45faf3..448f4a2 100644 (file)
@@ -289,11 +289,13 @@ sub DecodeMIMEWordsToEncoding {
     my $str = shift;
     my $enc = shift;
 
-   
-    @_ = $str =~ m/([^=]*)=\?([^?]+)\?([QqBb])\?([^?]+)\?=([^=]*)/g;
-
+    @_ = $str =~ m/(.*?)=\?([^?]+)\?([QqBb])\?([^?]+)\?=([^=]*)/gc;
     return ($str) unless (@_);
 
+    # add everything that hasn't matched to the end of the latest
+    # string in array this happen when we have 'key="=?encoded?="; key="plain"'
+    $_[-1] .= substr($str, pos $str);
+
     $str = "";
     while (@_) {
        my ($prefix, $charset, $encoding, $enc_str, $trailing) =
index 6c4c383..eacd65e 100644 (file)
-# German localization catalog for Request Tracker (RT)
-# FIRST AUTHOR: Florian Bischof <flo@fxb.de>, May 2002
-# Update by Torsten Brumm <torsten.brumm@kuehne-nagel.com>
-#
 msgid ""
 msgstr ""
-"Project-Id-Version: RT 3.4.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@uni-graz.at>\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2006-01-23 15:50+0100\n"
+"Last-Translator: Torsten Brumm <tob@brummix.de>\n"
 "Language-Team: rt-devel <rt-devel@lists.fsck.com>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: html/Approvals/Elements/Approve:48 html/Approvals/Elements/ShowDependency:71 html/SelfService/Display.html:46 html/Ticket/Display.html:47 html/Ticket/Display.html:51
 #. ($Ticket->id, $Ticket->Subject)
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
 #. ($ticket->Id, $ticket->Subject)
 #. ($TicketObj->Id, $TicketObj->Subject)
+#: html/Approvals/Elements/Approve:48
+#: html/Approvals/Elements/ShowDependency:71
+#: html/SelfService/Display.html:46
+#: html/Ticket/Display.html:47
+#: html/Ticket/Display.html:51
 msgid "#%1: %2"
 msgstr "#%1: %2"
 
-#: lib/RT/Record.pm:926
+#: html/Elements/ShowSearch:86
+msgid "$1"
+msgstr ""
+
 #. ($label)
+#: lib/RT/Record.pm:930
 msgid "$prefix %1"
 msgstr "$prefix %1"
 
-#: lib/RT/URI/fsck_com_rt.pm:257
 #. ($self->ObjectType, $self->Object->Id)
+#: lib/RT/URI/fsck_com_rt.pm:257
 msgid "%1 #%2"
 msgstr "%1 #%2"
 
-#: lib/RT/Date.pm:361
 #. ($s, $time_unit)
+#: lib/RT/Date.pm:361
 msgid "%1 %2"
 msgstr "%1 %2"
 
-#: lib/RT/Date.pm:397
 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900))
+#: lib/RT/Date.pm:397
 msgid "%1 %2 %3 %4:%5:%6 %7"
 msgstr "%1 %3. %2 %7, %4:%5:%6"
 
-#: lib/RT/Record.pm:1671 lib/RT/Transaction_Overlay.pm:636 lib/RT/Transaction_Overlay.pm:679
 #. ($cf->Name, $new_value->Content)
 #. ($field, $self->NewValue)
 #. ($self->Field, $principal->Object->Name)
+#: lib/RT/Record.pm:1675
+#: lib/RT/Transaction_Overlay.pm:635
+#: lib/RT/Transaction_Overlay.pm:678
 msgid "%1 %2 added"
-msgstr "%1 %2 hinzugefügt"
+msgstr "%1 %2 hinzugefügt"
 
-#: lib/RT/Date.pm:358
 #. ($s, $time_unit)
+#: lib/RT/Date.pm:358
 msgid "%1 %2 ago"
 msgstr "vor %1 %2"
 
-#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643
 #. ($cf->Name, $old_content,                $new_value->Content)
 #. ($field, $self->OldValue, $self->NewValue)
+#: lib/RT/Record.pm:1682
+#: lib/RT/Transaction_Overlay.pm:642
 msgid "%1 %2 changed to %3"
-msgstr "%1 %2 geändert in %3"
+msgstr "%1 %2 geändert in %3"
 
-#: lib/RT/Record.pm:1675 lib/RT/Transaction_Overlay.pm:639 lib/RT/Transaction_Overlay.pm:685
 #. ($cf->Name, $old_value->Content)
 #. ($field, $self->OldValue)
 #. ($self->Field, $principal->Object->Name)
+#: lib/RT/Record.pm:1679
+#: lib/RT/Transaction_Overlay.pm:638
+#: lib/RT/Transaction_Overlay.pm:684
 msgid "%1 %2 deleted"
-msgstr "%1 %2 gelöscht"
+msgstr "%1 %2 gelöscht"
 
-#: html/Admin/Elements/EditScrips:65 html/Admin/Elements/ListGlobalScrips:64 html/Ticket/Elements/PreviewScrips:98
 #. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name))
+#: html/Admin/Elements/EditScrips:65
+#: html/Admin/Elements/ListGlobalScrips:64
+#: html/Ticket/Elements/PreviewScrips:99
 msgid "%1 %2 with template %3"
 msgstr "%1 %2 mit der Vorlage %3"
 
-#: html/Ticket/Elements/ShowAttachments:72
 #. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name)
+#: html/Ticket/Elements/ShowAttachments:72
 msgid "%1 (%2) by %3"
 msgstr "%1 (%2) von %3"
 
-#: html/SelfService/Update.html:60 html/Ticket/Elements/EditBasics:87 html/Ticket/Update.html:61 html/Ticket/Update.html:63 html/Tools/MyDay.html:65
 #. (loc($DefaultStatus))
+#. (loc($Ticket->Status()))
 #. (loc($TicketObj->Status))
 #. ($TicketObj->OwnerObj->Name())
-#. (loc($Ticket->Status()))
+#: 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
 msgid "%1 (Unchanged)"
-msgstr "%1 (Unverändert)"
+msgstr "%1 (Unverändert)"
 
-#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207
 #. ("--search-argument", "--search")
 #. ("--condition-argument", "--condition")
 #. ("--action-argument", "--action")
+#: bin/rt-crontool:194
+#: bin/rt-crontool:201
+#: bin/rt-crontool:207
 msgid "%1 - An argument to pass to %2"
-msgstr "%1 - Ein Argument zur Übergabe an %2"
+msgstr "%1 - Ein Argument zur Übergabe an %2"
 
-#: bin/rt-crontool:210
 #. ("--verbose")
+#: bin/rt-crontool:210
 msgid "%1 - Output status updates to STDOUT"
 msgstr "%1 - Statusausgabe auf STDOUT"
 
-#: bin/rt-crontool:204
 #. ("--action")
+#: bin/rt-crontool:204
 msgid "%1 - Specify the action module you want to use"
 msgstr "%1 - Gibt an, welches Action-Modul benutzt werden soll"
 
-#: bin/rt-crontool:198
 #. ("--condition")
+#: bin/rt-crontool:198
 msgid "%1 - Specify the condition module you want to use"
 msgstr "%1 - Gibt an, welches Condition-Modul benutzt werden soll"
 
-#: bin/rt-crontool:191
 #. ("--search")
+#: bin/rt-crontool:191
 msgid "%1 - Specify the search module you want to use"
 msgstr "%1 - Gibt an, welches Search-Modul benutzt werden soll"
 
-     $RT::VERSION, 
-     '2005', 
-    '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
-#: html/Elements/Footer:58
-#. ('&#187;&#124;&#171;', 
-     $RT::VERSION, 
-     '2005', 
-    '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',)
+#. ('&#187;&#124;&#171;',
+#: html/Elements/Footer:61
 msgid "%1 RT %2 Copyright 1996-%3 %4."
-msgstr ""
+msgstr "%1 RT %2 Alle Rechte vorbehalten 1996-%3 %4."
 
-#: lib/RT/ScripAction_Overlay.pm:151
 #. ($self->Id)
+#: lib/RT/ScripAction_Overlay.pm:151
 msgid "%1 ScripAction loaded"
 msgstr "ScripAction %1 geladen"
 
-#: lib/RT/Record.pm:1708
 #. ($args{'Value'}, $cf->Name)
+#: lib/RT/Record.pm:1712
 msgid "%1 added as a value for %2"
-msgstr "%1 als Wert für %2 hinzugefügt"
+msgstr "%1 als Wert für %2 hinzugefügt"
 
-#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152
 #. ($args{'Base'})
 #. ($args{'Target'})
+#: lib/RT/Link_Overlay.pm:145
+#: lib/RT/Link_Overlay.pm:152
 msgid "%1 appears to be a local object, but can't be found in the database"
-msgstr ""
-"%1 konnte nicht in der Datenbank gefunden werden obwohl es ein lokales "
-"Objekt zu sein scheint"
+msgstr "%1 konnte nicht in der Datenbank gefunden werden obwohl es ein lokales Objekt zu sein scheint"
 
-#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520
 #. ($self->BriefDescription , $self->CreatorObj->Name)
 #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)
+#: html/Ticket/Elements/ShowDates:73
+#: lib/RT/Transaction_Overlay.pm:520
 msgid "%1 by %2"
 msgstr "%1 von %2"
 
-#: lib/RT/Transaction_Overlay.pm:777 lib/RT/Transaction_Overlay.pm:786 lib/RT/Transaction_Overlay.pm:789
 #. ($self->Field , $q1->Name , $q2->Name)
 #. ($self->Field, $t2->AsString, $t1->AsString)
 #. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'")
+#: lib/RT/Transaction_Overlay.pm:777
+#: lib/RT/Transaction_Overlay.pm:786
+#: lib/RT/Transaction_Overlay.pm:789
 msgid "%1 changed from %2 to %3"
-msgstr "%1 von %2 in %3 geändert"
+msgstr "%1 von %2 in %3 geändert"
 
-#: html/Search/Build.html:212
 #. ($Description)
+#: html/Search/Build.html:206
 msgid "%1 copy"
 msgstr "%1 kopieren"
 
-#: lib/RT/Record.pm:930
+#: lib/RT/Record.pm:934
 msgid "%1 could not be set to %2."
 msgstr "%1 konnte nicht auf %2 gesetzt werden."
 
-#: lib/RT/Ticket_Overlay.pm:2743
 #. ($self)
+#: lib/RT/Ticket_Overlay.pm:2726
 msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent."
-msgstr ""
-"%1 konnte den Status nicht auf erledigt setzen. Die RT-Datenbank könnte "
-"inkonsistent sein."
+msgstr "%1 konnte den Status nicht auf erledigt setzen. Die RT-Datenbank könnte inkonsistent sein."
 
-#: lib/RT/Transaction_Overlay.pm:560
 #. ($obj_type)
+#: lib/RT/Transaction_Overlay.pm:560
 msgid "%1 created"
 msgstr "%1 erstellt"
 
-#: lib/RT/Transaction_Overlay.pm:565
 #. ($obj_type)
+#: lib/RT/Transaction_Overlay.pm:565
 msgid "%1 deleted"
-msgstr "%1 gelöscht"
+msgstr "%1 gelöscht"
 
-#: html/Elements/MyTickets:47
-#. ($rows)
+#. ($Query, $PrimaryGroupBy)
+#: html/Search/Chart:71
+msgid "%1 grouped by %2"
+msgstr "%1 gruppiert durch %2"
+
+#: etc/initialdata:593
 msgid "%1 highest priority tickets I own"
-msgstr "Ihre %1 Anfragen höchster Priorität"
+msgstr "Ihre %1 Anfragen höchster Priorität"
 
-#: bin/rt-crontool:186
 #. ($0)
+#: bin/rt-crontool:186
 msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron."
-msgstr ""
+msgstr "%1 ist ein Tool um mit Tickets von externen Programmen zu arbeiten, wie zum Beispiel cron."
 
-#: lib/RT/Queue_Overlay.pm:860
 #. ($principal->Object->Name, $args{'Type'})
+#: lib/RT/Queue_Overlay.pm:860
 msgid "%1 is no longer a %2 for this queue."
 msgstr "%1 ist kein %2 dieses Bereichs mehr."
 
-#: html/Ticket/Create.html:186 html/Ticket/Create.html:187 html/Ticket/Elements/ShowBasics:58 html/Ticket/Elements/ShowBasics:64 html/Ticket/Elements/ShowBasics:69
-#. ('<input size=3 name="TimeWorked" value="'.$ARGS{TimeWorked}.'">')
-#. ('<input size=3 name="TimeLeft" value="'.$ARGS{TimeLeft}.'">')
 #. ($Ticket->TimeEstimated)
 #. ($Ticket->TimeWorked)
 #. ($Ticket->TimeLeft)
+#: html/Ticket/Elements/ShowBasics:58
+#: html/Ticket/Elements/ShowBasics:64
+#: html/Ticket/Elements/ShowBasics:69
 msgid "%1 min"
 msgstr "%1 Min"
 
-#: html/Elements/MyRequests:47
-#. ($rows)
+#: etc/initialdata:601
 msgid "%1 newest unowned tickets"
 msgstr "Die %1 neusten Anfragen ohne Besitzer"
 
-#: lib/RT/CustomField_Overlay.pm:827
+#: lib/RT/CustomField_Overlay.pm:881
 msgid "%1 objects"
 msgstr "%1 Objekte"
 
-#: html/User/Elements/DelegateRights:97
 #. (loc($ObjectType =~ /^RT::(.*)$/))
+#: html/User/Elements/DelegateRights:97
 msgid "%1 rights"
 msgstr "%1 Rechte"
 
-#: lib/RT/Action/ResolveMembers.pm:63
 #. (ref $self)
+#: lib/RT/Action/ResolveMembers.pm:63
 msgid "%1 will resolve all members of a resolved group ticket."
-msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets anführen."
+msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets anführen."
 
-#: lib/RT/CustomField_Overlay.pm:828
+#: lib/RT/CustomField_Overlay.pm:882
 msgid "%1's %2 objects"
 msgstr "%1's %2 Objekte"
 
-#: lib/RT/CustomField_Overlay.pm:829
+#: lib/RT/CustomField_Overlay.pm:883
 msgid "%1's %2's %3 objects"
 msgstr "%1's %2's %3 Objekte"
 
-#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56
 #. ($object->Name)
 #. ($Object->Name)
+#: html/Search/Elements/SearchPrivacy:52
+#: html/Search/Elements/SelectSearchObject:55
+#: html/Search/Elements/SelectSearchesForObjects:56
 msgid "%1's saved searches"
 msgstr "%1's gespeicherte Suchanfragen"
 
-#: lib/RT/Transaction_Overlay.pm:470
 #. ($self)
+#: lib/RT/Transaction_Overlay.pm:470
 msgid "%1: no attachment specified"
 msgstr "%1: kein Anhang angegeben"
 
-#: html/Ticket/Elements/ShowTransactionAttachments:78
 #. ($size)
+#: html/Ticket/Elements/ShowTransactionAttachments:78
 msgid "%1b"
 msgstr "%1b"
 
-#: html/Ticket/Elements/ShowTransactionAttachments:75
 #. (int( $size / 102.4 ) / 10)
+#: html/Ticket/Elements/ShowTransactionAttachments:75
 msgid "%1k"
 msgstr "%1k"
 
-#: lib/RT/Ticket_Overlay.pm:1118
 #. ($args{'Status'})
-msgid "'%1' is an invalid value for status"
-msgstr  "'%1' ist ein ung\303\274ltiger Wert f\303\274r Status"
-
-#: html/Admin/Elements/EditCustomFieldValues:50 html/Admin/Elements/EditQueueWatchers:50 html/Admin/Elements/EditScrips:56 html/Admin/Elements/EditTemplates:57 html/Admin/Groups/Members.html:73 html/Elements/EditLinks:54 html/Ticket/Elements/EditPeople:67 html/User/Groups/Members.html:76
+#: lib/RT/Ticket_Overlay.pm:1119
+#: html/Admin/Elements/EditCustomFieldValues:50
+#: html/Admin/Elements/EditQueueWatchers:50
+#: html/Admin/Elements/EditScrips:56
+#: html/Admin/Elements/EditTemplates:57
+#: html/Admin/Groups/Members.html:73
+#: html/Elements/EditLinks:54
+#: html/Ticket/Elements/EditPeople:67
+#: html/User/Groups/Members.html:76
 msgid "(Check box to delete)"
-msgstr "(Auswahl wird gelöscht)"
+msgstr "(Auswahl wird gelöscht)"
 
 #: html/Ticket/Elements/PreviewScrips:94
 msgid "(Check boxes to disable notifications to the listed recipients)"
-msgstr "(Benachrichtigung der markierten Empfänger wird unterdrückt)"
+msgstr "(Benachrichtigung der markierten Empfänger wird unterdrückt)"
 
-#: html/Ticket/Elements/PreviewScrips:116
+#: html/Ticket/Elements/PreviewScrips:118
 msgid "(Check boxes to enable notifications to the listed recipients)"
-msgstr "(Benachrichtigungen an markierte Empfänger aktivieren)"
+msgstr "(Benachrichtigungen an markierte Empfänger aktivieren)"
 
-#: html/Ticket/Create.html:209
+#: html/Ticket/Create.html:216
 msgid "(Enter ticket ids or URLs, separated with spaces)"
 msgstr "(Geben Sie die Anfrage IDs oder URLs getrennt durch Leerzeichen ein)"
 
-#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81
 #. ($RT::CorrespondAddress)
 #. ($RT::CommentAddress)
+#: html/Admin/Queues/Modify.html:75
+#: html/Admin/Queues/Modify.html:81
 msgid "(If left blank, will default to %1)"
 msgstr "(Standardwert: %1)"
 
-#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53
+#: html/Admin/Elements/EditCustomFields:74
+#: html/Admin/Elements/ListGlobalCustomFields:53
 msgid "(No custom fields)"
 msgstr "(Keine benutzerdefinierten Felder)"
 
-#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74
+#: html/Admin/Groups/Members.html:71
+#: html/User/Groups/Members.html:74
 msgid "(No members)"
 msgstr "(Keine Mitglieder)"
 
-#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49
+#: html/Admin/Elements/EditScrips:53
+#: html/Admin/Elements/ListGlobalScrips:49
 msgid "(No scrips)"
 msgstr "(Keine Scrips)"
 
@@ -294,31 +318,33 @@ msgstr "(Keine Scrips)"
 msgid "(No templates)"
 msgstr "(Keine Vorlagen)"
 
-#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47
+#: html/Admin/Elements/PickCustomFields:47
+#: html/Admin/Elements/PickObjects:47
 msgid "(None)"
 msgstr "(Nichts)"
 
-#: html/Ticket/Update.html:88
-msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr ""
+#: html/Ticket/Update.html:91
+msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(Sendet ein Blind Carbon Copy - BCC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden <strong>nicht</strong> übermittelt.)"
 
-#: html/Ticket/Create.html:100
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)"
-msgstr ""
+#: html/Ticket/Create.html:101
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update <strong>werden</strong> ebenfalls übermittelt.)"
 
-#: html/Ticket/Update.html:84
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will receive future updates.)"
-msgstr ""
+#: html/Ticket/Update.html:87
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <strong>not</strong> change who will receive future updates.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update werden <strong>nicht</strong> übermittelt.)"
 
-#: html/Ticket/Create.html:90
-msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)"
-msgstr ""
+#: html/Ticket/Create.html:91
+msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <strong>will</strong> receive future updates.)"
+msgstr "(Sendet ein Carbon Copy - CC Update and eine mit Komma separierte Liste von Mail Adressen. Zukünftige Update <strong>werden</strong> ebenfalls übermittelt.)"
 
 #: html/Admin/Elements/EditScrip:102
 msgid "(Use these fields when you choose 'User Defined' for a condition or action)"
-msgstr "(Benutze diese Felder, für 'Benutzer definierte' Bedingungen oder Aktionen)"
+msgstr "(Benutze diese Felder, für 'Benutzer definierte' Bedingungen oder Aktionen)"
 
-#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54
+#: html/Admin/Groups/index.html:57
+#: html/User/Groups/index.html:54
 msgid "(empty)"
 msgstr "(leer)"
 
@@ -326,7 +352,11 @@ msgstr "(leer)"
 msgid "(no name listed)"
 msgstr "(kein Name gelistet)"
 
-#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580
+#: html/Admin/Elements/SelectRights:72
+#: html/Elements/EditCustomFieldSelect:70
+#: html/Elements/SelectCustomFieldValue:51
+#: html/Elements/ShowCustomFields:65
+#: lib/RT/Transaction_Overlay.pm:579
 msgid "(no value)"
 msgstr "(kein Wert)"
 
@@ -334,7 +364,8 @@ msgstr "(kein Wert)"
 msgid "(no values)"
 msgstr "(keine Werte)"
 
-#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49
+#: html/Elements/EditLinks:132
+#: html/Ticket/Elements/BulkLinks:49
 msgid "(only one ticket)"
 msgstr "(nur eine Anfrage)"
 
@@ -354,6 +385,14 @@ msgstr "(notwendig)"
 msgid "(untitled)"
 msgstr "(unbenannt)"
 
+#: html/Ticket/Elements/Reminders:86
+msgid "(yyyy/mm/dd)"
+msgstr "(jjjj/mm/tt)"
+
+#: html/Elements/EditCustomFieldSelect:58
+msgid "-"
+msgstr ""
+
 #: html/Ticket/Elements/ShowBasics:53
 msgid "<% $Ticket->Status%>"
 msgstr "<% $Ticket->Status%>"
@@ -368,10 +407,16 @@ msgstr "<%$_%>"
 
 #: html/Search/Elements/DisplayOptions:65
 msgid "<%$field%>"
-msgstr ""
+msgstr "<%$field%>"
+
+#. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: html/Elements/CreateTicket:47
+msgid "<input type=\"submit\" class=\"button\" value=\"New ticket in\" />&nbsp;%1"
+msgstr "<input type=\"submit\" class=\"button\" value=\"Neues Ticket in\" />&nbsp;%1"
 
-#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787
 #. ($m->scomp('/Elements/SelectNewTicketQueue'))
+#: docs/design_docs/string-extraction-guide.txt:54
+#: lib/RT/StyleGuide.pod:787
 msgid "<input type=\"submit\" value=\"New ticket in\">&nbsp;%1"
 msgstr "<input type=\"submit\" value=\"Neue Anfrage in\">&nbsp;%1"
 
@@ -381,15 +426,16 @@ msgstr "Eine leere Vorlage"
 
 #: html/Admin/Users/Modify.html:363
 msgid "A password was not set, so user won't be able to login."
-msgstr ""
+msgstr "Es wurde kein Passwort gesetzt, der User wird sich nicht anmelden können!"
 
-#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219
+#: lib/RT/ACE_Overlay.pm:175
+#: lib/RT/Principal_Overlay.pm:219
 msgid "ACE not found"
 msgstr "ACE nicht gefunden"
 
 #: lib/RT/ACE_Overlay.pm:854
 msgid "ACEs can only be created and deleted."
-msgstr "ACEs können nur erstellt und gelöscht werden."
+msgstr "ACEs können nur erstellt und gelöscht werden."
 
 #: html/Search/Elements/SelectAndOr:46
 msgid "AND"
@@ -397,7 +443,7 @@ msgstr "UND"
 
 #: html/User/Elements/Tabs:53
 msgid "About me"
-msgstr "Über mich"
+msgstr "Über mich"
 
 #: html/Admin/Users/Modify.html:106
 msgid "Access control"
@@ -407,14 +453,14 @@ msgstr "Zugriffskontrolle"
 msgid "Action"
 msgstr "Aktion"
 
-#: lib/RT/Scrip_Overlay.pm:173
 #. ($args{'ScripAction'})
+#: lib/RT/Scrip_Overlay.pm:173
 msgid "Action %1 not found"
 msgstr "Aktion %1 nicht gefunden"
 
 #: bin/rt-crontool:148
 msgid "Action committed.\\n"
-msgstr "Aktion durchgeführt.\\n"
+msgstr "Aktion durchgeführt.\\n"
 
 #: bin/rt-crontool:144
 msgid "Action prepared..."
@@ -422,79 +468,97 @@ msgstr "Aktion vorbereitet..."
 
 #: html/Search/Build.html:85
 msgid "Add"
-msgstr "Hinzufügen"
+msgstr "Hinzufügen"
 
-#: html/Search/Bulk.html:114
+#: html/Search/Bulk.html:92
 msgid "Add AdminCc"
-msgstr "AdminCC hinzufügen"
+msgstr "AdminCC hinzufügen"
 
-#: html/Search/Bulk.html:110
+#: html/Search/Bulk.html:88
 msgid "Add Cc"
-msgstr "CC hinzufügen"
+msgstr "CC hinzufügen"
 
 #: html/Search/Elements/EditFormat:49
 msgid "Add Columns"
-msgstr "Spalten hinzufügen"
+msgstr "Spalten hinzufügen"
 
 #: html/Search/Elements/PickCriteria:46
 msgid "Add Criteria"
-msgstr "Kriterium hinzufügen"
+msgstr "Kriterium hinzufügen"
 
-#: html/Ticket/Create.html:144 html/Ticket/Update.html:114
+#: html/Ticket/Create.html:145
+#: html/Ticket/Update.html:117
 msgid "Add More Files"
-msgstr "Weitere Dateien anhängen"
+msgstr "Weitere Dateien anhängen"
 
-#: html/Search/Bulk.html:106
+#: html/Search/Bulk.html:84
 msgid "Add Requestor"
-msgstr "Klient hinzufügen"
+msgstr "Klient hinzufügen"
 
 #: html/Admin/Elements/AddCustomFieldValue:46
 msgid "Add Value"
-msgstr "Wert hinzufügen"
+msgstr "Wert hinzufügen"
 
 #: html/Admin/Global/Scrip.html:76
 msgid "Add a scrip which will apply to all queues"
 msgstr "Scrip erstellen, das auf alle Bereiche angewendet wird"
 
-#: html/Search/Build.html:85
+#: NOT FOUND IN SOURCE
 msgid "Add additional criteria"
-msgstr "zusätzliches Kriterium hinzufügen"
+msgstr "zusätzliches Kriterium hinzufügen"
 
-#: html/Search/Bulk.html:146
+#: html/Search/Build.html:109
+#: html/Search/Build.html:94
+msgid "Add and Search"
+msgstr "Hinzufügen und Suchen"
+
+#: html/Search/Bulk.html:124
 msgid "Add comments or replies to selected tickets"
-msgstr "Füge den ausgewählten Anfragen Kommentare oder Antworten hinzu"
+msgstr "Füge den ausgewählten Anfragen Kommentare oder Antworten hinzu"
 
-#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60
+#: html/Admin/Groups/Members.html:63
+#: html/User/Groups/Members.html:60
 msgid "Add members"
-msgstr "Mitglieder hinzufügen"
+msgstr "Mitglieder hinzufügen"
 
-#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49
+#: html/Admin/Queues/People.html:87
+#: html/Ticket/Elements/AddWatchers:49
 msgid "Add new watchers"
-msgstr "Neue Beobachter hinzufügen"
+msgstr "Neue Beobachter hinzufügen"
+
+#: html/Search/Build.html:85
+msgid "Add these terms to your search"
+msgstr "Diese Bedingungen zur Suche hinzufügen"
+
+#: html/Search/Bulk.html:159
+msgid "Add values"
+msgstr "Werte hinzufügen"
 
-#: lib/RT/CustomField_Overlay.pm:103
+#: lib/RT/CustomField_Overlay.pm:108
 msgid "Add, delete and modify custom field values for objects"
-msgstr "Hinzufügen, Löschen und Ändern von Werten benutzerdefinierter Felder von Objekten"
+msgstr "Hinzufügen, Löschen und Ändern von Werten benutzerdefinierter Felder von Objekten"
 
-#: lib/RT/Queue_Overlay.pm:760
 #. ($args{'Type'})
+#: lib/RT/Queue_Overlay.pm:760
 msgid "Added principal as a %1 for this queue"
-msgstr "Rolle wurde als %1 für diesen Bereich hinzugefügt"
+msgstr "Rolle wurde als %1 für diesen Bereich hinzugefügt"
 
-#: lib/RT/Ticket_Overlay.pm:1416
 #. ($self->loc($args{'Type'}))
+#: lib/RT/Ticket_Overlay.pm:1417
 msgid "Added principal as a %1 for this ticket"
-msgstr "Rolle wurde als %1 für diese Anfrage hinzugefügt"
+msgstr "Rolle wurde als %1 für diese Anfrage hinzugefügt"
 
-#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133
+#: html/Admin/Users/Modify.html:146
+#: html/User/Prefs.html:133
 msgid "Address1"
 msgstr "Adresse 1"
 
-#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137
+#: html/Admin/Users/Modify.html:151
+#: html/User/Prefs.html:137
 msgid "Address2"
 msgstr "Adresse 2"
 
-#: html/Ticket/Create.html:95
+#: html/Ticket/Create.html:96
 msgid "Admin Cc"
 msgstr "Admin CC"
 
@@ -506,19 +570,23 @@ msgstr "Admin Kommentar"
 msgid "Admin Correspondence"
 msgstr "Admin Korrespondenz"
 
-#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49
+#: html/Admin/Queues/index.html:46
+#: html/Admin/Queues/index.html:49
 msgid "Admin queues"
 msgstr "Admin Bereiche"
 
-#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49
+#: html/Admin/Global/index.html:47
+#: html/Admin/Global/index.html:49
 msgid "Admin/Global configuration"
 msgstr "Admin/Globale Einstellungen"
 
-#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114
+#: etc/initialdata:56
+#: html/Ticket/Elements/ShowPeople:60
+#: lib/RT/ACE_Overlay.pm:114
 msgid "AdminCc"
 msgstr "AdminCc"
 
-#: lib/RT/CustomField_Overlay.pm:101
+#: lib/RT/CustomField_Overlay.pm:106
 msgid "AdminCustomField"
 msgstr "AdminBenutzerdefiniertesFeld"
 
@@ -528,11 +596,11 @@ msgstr "AdminGruppe"
 
 #: lib/RT/Group_Overlay.pm:173
 msgid "AdminGroupMembership"
-msgstr "AdminGruppenZugehörigkeit"
+msgstr "AdminGruppenZugehörigkeit"
 
 #: lib/RT/System.pm:81
 msgid "AdminOwnPersonalGroups"
-msgstr "AdminEigenePersönlicheGruppen"
+msgstr "AdminEigenePersönlicheGruppen"
 
 #: lib/RT/Queue_Overlay.pm:93
 msgid "AdminQueue"
@@ -542,11 +610,12 @@ msgstr "AdminBereich"
 msgid "AdminUsers"
 msgstr "AdminBenutzer"
 
-#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75
+#: html/Admin/Queues/People.html:69
+#: html/Ticket/Elements/EditPeople:75
 msgid "Administrative Cc"
 msgstr "Administrative CC"
 
-#: html/Ticket/Elements/Tabs:197
+#: html/Ticket/Elements/Tabs:209
 msgid "Advanced"
 msgstr "Erweitert"
 
@@ -570,9 +639,10 @@ msgstr "Alle Bereiche"
 msgid "And/Or"
 msgstr "Und/Oder"
 
-#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83
+#: html/Admin/CustomFields/Modify.html:73
+#: html/Admin/Elements/CustomFieldTabs:83
 msgid "Applies to"
-msgstr "gilt für"
+msgstr "gilt für"
 
 #: html/Search/Edit.html:64
 msgid "Apply"
@@ -580,26 +650,28 @@ msgstr "anwenden"
 
 #: html/Search/Edit.html:64
 msgid "Apply your changes"
-msgstr "Änderungen anwenden"
+msgstr "Änderungen anwenden"
 
-#: html/Elements/Tabs:74
+#: html/Elements/Tabs:77
 msgid "Approval"
 msgstr "Freigabe"
 
-#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86
 #. ($Ticket->Id, $Ticket->Subject)
 #. ($ticket->id, $msg)
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
+#: html/Approvals/Display.html:65
+#: html/Approvals/Elements/ShowDependency:63
+#: html/Approvals/index.html:86
 msgid "Approval #%1: %2"
 msgstr "Freigabe #%1: %2"
 
-#: html/Approvals/index.html:75
 #. ($ticket->Id)
+#: html/Approvals/index.html:75
 msgid "Approval #%1: Notes not recorded due to a system error"
 msgstr "Freigabe #%1: Notiz wurde aufgrund eines Systemfehlers nicht gespeichert"
 
-#: html/Approvals/index.html:73
 #. ($ticket->Id)
+#: html/Approvals/index.html:73
 msgid "Approval #%1: Notes recorded"
 msgstr "Freigabe #%1: Notiz gespeichert"
 
@@ -623,7 +695,8 @@ msgstr "Notizen des Freigebenden: %1"
 msgid "Apr."
 msgstr "Apr."
 
-#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73
+#: html/Elements/SelectSortOrder:56
+#: html/Search/Elements/DisplayOptions:73
 msgid "Ascending"
 msgstr "aufsteigend"
 
@@ -635,20 +708,28 @@ msgstr "Zuweisen und Entfernen von benutzerdefinierten Feldern"
 msgid "AssignCustomFields"
 msgstr "BenutzerdefiniertesFeldZuweisen"
 
-#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114
+#: html/Search/Bulk.html:142
+#: html/SelfService/Update.html:87
+#: html/Ticket/ModifyAll.html:115
+#: html/Ticket/Update.html:117
 msgid "Attach"
-msgstr "Anhängen"
+msgstr "Anhängen"
 
-#: html/SelfService/Create.html:92 html/Ticket/Create.html:140
+#: html/SelfService/Create.html:92
+#: html/Ticket/Create.html:141
 msgid "Attach file"
-msgstr "Datei anhängen"
+msgstr "Datei anhängen"
 
-#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92
+#: html/SelfService/Update.html:75
+#: html/Ticket/Create.html:129
+#: html/Ticket/Update.html:95
 msgid "Attached file"
 msgstr "Dateianhang"
 
-#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59
 #. ($Attachment)
+#: html/Ticket/ShowEmailRecord.html:52
+#: html/Ticket/ShowEmailRecord.html:56
+#: html/Ticket/ShowEmailRecord.html:59
 msgid "Attachment '%1' could not be loaded"
 msgstr "Anhang '%1' konnte nicht geladen werden"
 
@@ -656,17 +737,17 @@ msgstr "Anhang '%1' konnte nicht geladen werden"
 msgid "Attachment created"
 msgstr "Anhang erstellt"
 
-#: lib/RT/Tickets_Overlay.pm:1673
+#: lib/RT/Tickets_Overlay.pm:1720
 msgid "Attachment filename"
 msgstr "Dateiname des Anhangs"
 
 #: html/Ticket/Elements/ShowAttachments:47
 msgid "Attachments"
-msgstr "Anhänge"
+msgstr "Anhänge"
 
 #: lib/RT/Attributes_Overlay.pm:172
 msgid "Attribute Deleted"
-msgstr "Attribut gelöscht"
+msgstr "Attribut gelöscht"
 
 #: lib/RT/Date.pm:444
 msgid "Aug."
@@ -680,29 +761,41 @@ msgstr "Automatische Antwort"
 msgid "Autoreply To Requestors"
 msgstr "Automatische Antwort an Klienten"
 
-#: html/Admin/Elements/CustomFieldTabs:65 html/Admin/Elements/GroupTabs:60 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/UserTabs:58 html/Ticket/Elements/Tabs:113 html/User/Elements/GroupTabs:59
+#: html/Widgets/SelectionBox:186
+msgid "Available"
+msgstr "Verfügbar"
+
+#: html/Admin/Elements/CustomFieldTabs:65
+#: html/Admin/Elements/GroupTabs:60
+#: html/Admin/Elements/QueueTabs:60
+#: html/Admin/Elements/UserTabs:58
+#: html/Ticket/Elements/Tabs:113
+#: html/User/Elements/GroupTabs:59
 msgid "Basics"
 msgstr "Grundlagen"
 
-#: html/Ticket/Update.html:86
+#: html/Ticket/Update.html:89
 msgid "Bcc"
 msgstr "BCC"
 
-#: html/Admin/CustomFields/GroupRights.html:91 html/Admin/CustomFields/UserRights.html:74 html/Admin/Elements/EditScrip:95
+#: html/Admin/CustomFields/GroupRights.html:91
+#: html/Admin/CustomFields/UserRights.html:74
+#: html/Admin/Elements/EditScrip:95
 msgid "Be sure to save your changes"
-msgstr "Änderungen speichern"
+msgstr "Änderungen speichern"
 
-#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360
+#: html/Elements/SelectDateRelation:55
+#: lib/RT/CurrentUser.pm:360
 msgid "Before"
 msgstr "vor dem"
 
-#: html/Elements/Header:80
+#: html/Elements/Logo:47
 msgid "Best Practical Solutions, LLC corporate logo"
-msgstr ""
+msgstr "Best Practical Solutions, LLC Firmen Logo"
 
 #: NOT FOUND IN SOURCE
 msgid "Binary"
-msgstr "Binär"
+msgstr "Binär"
 
 #: etc/initialdata:217
 msgid "Blank"
@@ -712,36 +805,41 @@ msgstr "Leer"
 msgid "Bold"
 msgstr "Fett"
 
-#: html/Search/Results.html:81
+#: html/Search/Results.html:82
 msgid "Bookmarkable link"
 msgstr "Speicherbarer Link"
 
-#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66
+#: html/Ticket/Elements/ShowHistory:60
+#: html/Ticket/Elements/ShowHistory:65
 msgid "Brief headers"
 msgstr "Kurze Kopfzeilen"
 
-#: html/Search/Bulk.html:46 html/Search/Bulk.html:47
+#: html/Ticket/Elements/Tabs:220
+msgid "Bulk Update"
+msgstr "Massen Update"
+
+#: NOT FOUND IN SOURCE
 msgid "Bulk ticket update"
 msgstr "Massen Anfrageaktualisierung"
 
-#: lib/RT/User_Overlay.pm:1722
+#: lib/RT/User_Overlay.pm:1883
 msgid "Can not modify system users"
-msgstr "Kann Systembenutzer nicht ändern"
+msgstr "Kann Systembenutzer nicht ändern"
 
 #: lib/RT/Queue_Overlay.pm:92
 msgid "Can this principal see this queue"
 msgstr "Kann diese Rolle diesen Bereich sehen"
 
-#: lib/RT/CustomField_Overlay.pm:370
+#: lib/RT/CustomField_Overlay.pm:373
 msgid "Can't add a custom field value without a name"
-msgstr "Kann kein benutzerdefiniertes Feld ohne Namen hinzufügen"
+msgstr "Kann kein benutzerdefiniertes Feld ohne Namen hinzufügen"
 
-#: html/Admin/CustomFields/Objects.html:86
 #. ($Class)
+#: html/Admin/CustomFields/Objects.html:86
 msgid "Can't find a collection class for '%1'"
-msgstr ""
+msgstr "Es wurde keine Kollektion gefunden für '%1'"
 
-#: html/Search/Build.html:761
+#: html/Search/Build.html:742
 msgid "Can't find a saved search to work with"
 msgstr "Kann keine gespeicherte Suche finden"
 
@@ -749,60 +847,103 @@ msgstr "Kann keine gespeicherte Suche finden"
 msgid "Can't link a ticket to itself"
 msgstr "Kann kein Anfrage auf sich selbst verweisen lassen!"
 
-#: html/Search/Build.html:766
+#: html/Search/Build.html:748
 msgid "Can't save this search"
 msgstr "Kann diese Suche nicht speichern"
 
-#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344
+#: lib/RT/Record.pm:1270
+#: lib/RT/Record.pm:1348
 msgid "Can't specifiy both base and target"
-msgstr "Sie können Basis und Ziel nicht gleichzeitig angeben"
+msgstr "Sie können Basis und Ziel nicht gleichzeitig angeben"
 
-#: html/autohandler:148
 #. ($msg)
+#: html/autohandler:166
 msgid "Cannot create user: %1"
 msgstr "Kann Benutzer nicht anlegen: %1"
 
-#: etc/initialdata:50 html/Admin/Queues/People.html:65 html/SelfService/Create.html:71 html/Ticket/Create.html:85 html/Ticket/Elements/EditPeople:72 html/Ticket/Elements/ShowPeople:56 html/Ticket/Update.html:81 lib/RT/ACE_Overlay.pm:113
+#: html/Admin/Elements/AddCustomFieldValue:62
+#: html/Admin/Elements/EditCustomFieldValues:58
+msgid "Category"
+msgstr "Kategorie"
+
+#: etc/initialdata:50
+#: html/Admin/Queues/People.html:65
+#: html/SelfService/Create.html:71
+#: html/Ticket/Create.html:86
+#: html/Ticket/Elements/EditPeople:72
+#: html/Ticket/Elements/ShowPeople:56
+#: html/Ticket/Update.html:84
+#: lib/RT/ACE_Overlay.pm:113
 msgid "Cc"
 msgstr "CC"
 
 #: html/SelfService/Prefs.html:52
 msgid "Change password"
-msgstr "Passwort ändern"
+msgstr "Passwort ändern"
 
-#: html/Elements/Submit:100
+#: html/Elements/Submit:91
 msgid "Check All"
-msgstr "Alle auswählen"
+msgstr "Alle auswählen"
 
-#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95
+#: html/SelfService/Update.html:78
+#: html/Ticket/Create.html:132
+#: html/Ticket/Update.html:98
 msgid "Check box to delete"
-msgstr "Zum Löschen anwählen"
+msgstr "Zum Löschen anwählen"
 
 #: html/Admin/Elements/SelectRights:55
 msgid "Check box to revoke right"
-msgstr "Zum Entziehen einer Berechtigung anwählen"
+msgstr "Zum Entziehen einer Berechtigung anwählen"
 
-#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64
+#: html/Elements/EditLinks:148
+#: html/Elements/EditLinks:85
+#: html/Elements/ShowLinks:78
+#: html/Ticket/Create.html:221
+#: html/Ticket/Elements/BulkLinks:64
 msgid "Children"
 msgstr "Kinder"
 
-#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141
+#: html/NoAuth/js/util.js:70
+#: html/NoAuth/js/util.js:88
+msgid "Choose a date"
+msgstr "Datum auswählen"
+
+#: html/Admin/Users/Modify.html:156
+#: html/User/Prefs.html:141
 msgid "City"
 msgstr "Stadt"
 
-#: html/Elements/Submit:102
+#: html/Elements/Submit:93
 msgid "Clear All"
-msgstr "Alles löschen"
+msgstr "Alles löschen"
+
+#: html/Helpers/CalPopup.html:6
+msgid "Close window"
+msgstr "Fenster schliessen"
 
 #: html/Ticket/Elements/ShowDates:68
 msgid "Closed"
 msgstr "Geschlossen"
 
-#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66
+#: html/SelfService/Closed.html:46
+#: html/SelfService/Elements/Tabs:66
 msgid "Closed tickets"
 msgstr "Geschlossene Anfragen"
 
-#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176
+#: lib/RT/CustomField_Overlay.pm:89
+msgid "Combobox: Select or enter multiple values"
+msgstr "Combobox: Selektiere oder gebe mehrere Werte ein"
+
+#: lib/RT/CustomField_Overlay.pm:90
+msgid "Combobox: Select or enter one value"
+msgstr "Combobox: Selektiere oder gib einen Wert ein"
+
+#: lib/RT/CustomField_Overlay.pm:91
+msgid "Combobox: Select or enter up to %1 values"
+msgstr "Combobox: Selektiere oder gib bis zu %1 Werte ein"
+
+#: html/Ticket/Elements/ShowTransaction:189
+#: html/Ticket/Elements/Tabs:178
 msgid "Comment"
 msgstr "Kommentar"
 
@@ -818,25 +959,27 @@ msgstr "Kommentiere Anfragen"
 msgid "CommentOnTicket"
 msgstr "AnfrageKommentieren"
 
-#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73
+#: html/Ticket/ModifyAll.html:91
+#: html/Ticket/Update.html:76
 msgid "Comments (Not sent to requestors)"
 msgstr "Kommentare (werden nicht an Klienten geschickt)"
 
-#: html/Search/Bulk.html:150
+#: html/Search/Bulk.html:128
 msgid "Comments (not sent to requestors)"
 msgstr "Kommentare (werden nicht an Klienten geschickt)"
 
-#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67
+#: html/Admin/Users/Modify.html:224
+#: html/Ticket/Elements/ShowRequestor:66
 msgid "Comments about this user"
 msgstr "Kommentare zu diesem Benutzer"
 
 #: lib/RT/Transaction_Overlay.pm:623
 msgid "Comments added"
-msgstr "Kommentar hinzugefügt"
+msgstr "Kommentar hinzugefügt"
 
 #: lib/RT/Action/Generic.pm:176
 msgid "Commit Stubbed"
-msgstr "Commit Stumpf ausgeführt"
+msgstr "Commit Stumpf ausgeführt"
 
 #: html/Admin/Elements/EditScrip:63
 msgid "Condition"
@@ -850,15 +993,17 @@ msgstr "Bedingung trifft zu..."
 msgid "Condition not found"
 msgstr "Bedingung nicht gefunden"
 
-#: html/Elements/Tabs:81
+#: html/Elements/Tabs:84
 msgid "Configuration"
 msgstr "Konfiguration"
 
 #: html/SelfService/Prefs.html:54
 msgid "Confirm"
-msgstr "Bestätigen"
+msgstr "Bestätigen"
 
-#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119
+#: html/Admin/Elements/ModifyTemplate:65
+#: html/Elements/SelectAttachmentField:48
+#: html/Ticket/ModifyAll.html:119
 msgid "Content"
 msgstr "Inhalt"
 
@@ -876,53 +1021,68 @@ msgstr "Korrespondenz"
 
 #: lib/RT/Transaction_Overlay.pm:619
 msgid "Correspondence added"
-msgstr "Korrespondenz hinzugefügt"
+msgstr "Korrespondenz hinzugefügt"
 
-#: lib/RT/Record.pm:1693
+#: lib/RT/Record.pm:1697
 msgid "Could not add new custom field value. "
-msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen"
+msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen"
 
-#: lib/RT/Record.pm:1646
 #. (, $value_msg)
+#: lib/RT/Record.pm:1650
 msgid "Could not add new custom field value. %1 "
-msgstr "Konnte kein neuen benutzerdefinierten Wert hinzufügen. %1 "
+msgstr "Konnte kein neuen benutzerdefinierten Wert hinzufügen. %1 "
 
-#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029
+#: lib/RT/Ticket_Overlay.pm:2987
+#: lib/RT/Ticket_Overlay.pm:2995
+#: lib/RT/Ticket_Overlay.pm:3012
 msgid "Could not change owner. "
-msgstr "Konnte den Besitzer nicht ändern. "
+msgstr "Konnte den Besitzer nicht ändern. "
 
-#: html/Admin/CustomFields/Modify.html:119
 #. ($msg)
+#: html/Admin/CustomFields/Modify.html:135
 msgid "Could not create CustomField"
 msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen"
 
-#: html/Admin/Elements/EditCustomField:113
 #. ($msg)
+#: html/Admin/Elements/EditCustomField:113
 msgid "Could not create CustomField: %1"
 msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen: %1"
 
-#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509
+#: html/User/Groups/Modify.html:98
+#: lib/RT/Group_Overlay.pm:502
+#: lib/RT/Group_Overlay.pm:509
 msgid "Could not create group"
 msgstr "Konnte Gruppe nicht anlegen"
 
-#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93
 #. ($msg)
+#: html/Admin/Global/Template.html:96
+#: html/Admin/Queues/Template.html:93
 msgid "Could not create template: %1"
 msgstr "Konnte Vorlage nicht anlegen: %1"
 
-#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396
+#: lib/RT/Ticket_Overlay.pm:1052
+#: lib/RT/Ticket_Overlay.pm:397
 msgid "Could not create ticket. Queue not set"
 msgstr "Konnte Anfrage nicht anlegen. Bereich nicht angegeben"
 
-#: lib/RT/User_Overlay.pm:256 lib/RT/User_Overlay.pm:270 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:288 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:311 lib/RT/User_Overlay.pm:321 lib/RT/User_Overlay.pm:497
+#: lib/RT/User_Overlay.pm:256
+#: lib/RT/User_Overlay.pm:270
+#: lib/RT/User_Overlay.pm:279
+#: lib/RT/User_Overlay.pm:288
+#: lib/RT/User_Overlay.pm:297
+#: lib/RT/User_Overlay.pm:311
+#: lib/RT/User_Overlay.pm:321
+#: lib/RT/User_Overlay.pm:497
 msgid "Could not create user"
 msgstr "Konnte Benutzer nicht anlegen"
 
-#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384
+#: lib/RT/Queue_Overlay.pm:738
+#: lib/RT/Ticket_Overlay.pm:1385
 msgid "Could not find or create that user"
 msgstr "Konnte diesen Benutzer nicht finden oder anlegen"
 
-#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465
+#: lib/RT/Queue_Overlay.pm:799
+#: lib/RT/Ticket_Overlay.pm:1466
 msgid "Could not find that principal"
 msgstr "Konnte diese Rolle nicht finden"
 
@@ -930,31 +1090,33 @@ msgstr "Konnte diese Rolle nicht finden"
 msgid "Could not load CustomField %1"
 msgstr "Konnte benutzerdefiniertes Feld %1 nicht laden"
 
-#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103
+#: html/Admin/Groups/Members.html:109
+#: html/User/Groups/Members.html:111
+#: html/User/Groups/Modify.html:103
 msgid "Could not load group"
 msgstr "Konnte die Gruppe nicht laden"
 
-#: lib/RT/SavedSearch.pm:120
 #. ($privacy)
+#: lib/RT/SavedSearch.pm:120
 msgid "Could not load object for %1"
-msgstr ""
+msgstr "Kann Objekt für %1 nicht laden"
 
 #: lib/RT/SavedSearch.pm:188
 msgid "Could not load search attribute"
-msgstr ""
+msgstr "Kann Such Attribut nicht laden"
 
-#: lib/RT/Queue_Overlay.pm:758
 #. ($args{'Type'})
+#: lib/RT/Queue_Overlay.pm:758
 msgid "Could not make that principal a %1 for this queue"
 msgstr "Konnte diese Rolle nicht zu einen %1 dieses Bereichs machen"
 
-#: lib/RT/Ticket_Overlay.pm:1405
 #. ($self->loc($args{'Type'}))
+#: lib/RT/Ticket_Overlay.pm:1406
 msgid "Could not make that principal a %1 for this ticket"
 msgstr "Konnte diese Rolle nicht zu einem %1 dieses Anfragen machen"
 
-#: lib/RT/Queue_Overlay.pm:857
 #. ($args{'Type'})
+#: lib/RT/Queue_Overlay.pm:857
 msgid "Could not remove that principal as a %1 for this queue"
 msgstr "Konnte diese Rolle nicht als %1 dieses Bereichs entfernen"
 
@@ -964,14 +1126,15 @@ msgstr "Konnte Benutzerinformation nicht speichern"
 
 #: lib/RT/Group_Overlay.pm:1011
 msgid "Couldn't add member to group"
-msgstr "Konnte Benutzer nicht der Gruppe hinzufügen"
+msgstr "Konnte Benutzer nicht der Gruppe hinzufügen"
 
-#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757
 #. ($Msg)
+#: lib/RT/Record.pm:1709
+#: lib/RT/Record.pm:1761
 msgid "Couldn't create a transaction: %1"
 msgstr "Konnte die Transaktion nicht anlegen: %1"
 
-#: lib/RT/Record.pm:939
+#: lib/RT/Record.pm:943
 msgid "Couldn't find row"
 msgstr "Konnte Zeile nicht finden"
 
@@ -979,69 +1142,82 @@ msgstr "Konnte Zeile nicht finden"
 msgid "Couldn't find that principal"
 msgstr "Konnte diese Rolle nicht finden"
 
-#: lib/RT/CustomField_Overlay.pm:404
+#: lib/RT/CustomField_Overlay.pm:403
 msgid "Couldn't find that value"
 msgstr "Konnte diesen Wert nicht finden"
 
-#: lib/RT/CurrentUser.pm:146
 #. ($self->Id)
+#: lib/RT/CurrentUser.pm:146
 msgid "Couldn't load %1 from the users database.\\n"
 msgstr "Konnte %1 nicht aus der Benutzerdatenbank laden.\\n"
 
-#: html/Admin/CustomFields/UserRights.html:149
 #. ($id)
+#: html/Admin/CustomFields/UserRights.html:149
 msgid "Couldn't load Class %1"
 msgstr "Konnte die Klasse %1 nicht laden"
 
-#: html/Admin/CustomFields/GroupRights.html:107
 #. ($id)
+#: html/Admin/CustomFields/GroupRights.html:107
 msgid "Couldn't load CustomField %1"
 msgstr "Konnte das benutzerdefinierte Feld %1 nicht laden"
 
-#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96
 #. ($id)
+#: html/Admin/Groups/GroupRights.html:109
+#: html/Admin/Groups/UserRights.html:96
 msgid "Couldn't load group %1"
 msgstr "Konnte Gruppe %1 nicht laden"
 
-#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239
+#: lib/RT/Link_Overlay.pm:203
+#: lib/RT/Link_Overlay.pm:212
+#: lib/RT/Link_Overlay.pm:239
 msgid "Couldn't load link"
 msgstr "Konnte den Verweis nicht laden"
 
-#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59
 #. ($id)
+#: html/Admin/Elements/ObjectCustomFields:83
+#: html/Admin/Queues/CustomFields.html:59
+#: html/Admin/Users/CustomFields.html:59
 msgid "Couldn't load object %1"
 msgstr "Konnte Objekt %1 nicht laden"
 
-#: html/Admin/Queues/People.html:142
 #. ($id)
+#: html/Admin/Queues/People.html:142
 msgid "Couldn't load queue"
 msgstr "Konnte den Bereich nicht laden"
 
-#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93
 #. ($id)
+#: html/Admin/Queues/GroupRights.html:122
+#: html/Admin/Queues/UserRights.html:93
 msgid "Couldn't load queue %1"
 msgstr "Konnte den Bereich %1 nicht laden"
 
-#: html/SelfService/Display.html:156
 #. ($id)
+#: html/SelfService/Display.html:156
 msgid "Couldn't load ticket '%1'"
 msgstr "Konnte das Anfrage '%1' nicht laden"
 
-#: lib/RT/Ticket_Overlay.pm:2612
 #. ($args{'Base'})
+#: lib/RT/Ticket_Overlay.pm:2595
 msgid "Couldn't resolve base '%1' into a URI."
-msgstr ""
+msgstr "Basis '%1' kann nicht zu einer URI aufgelöst werden."
 
-#: lib/RT/Ticket_Overlay.pm:2611
 #. ($args{'Target'})
+#: lib/RT/Ticket_Overlay.pm:2594
 msgid "Couldn't resolve target '%1' into a URI."
-msgstr ""
+msgstr "Ziel '%1' kann nicht zu einer URI aufgelöst werden."
 
-#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153
+#: html/Admin/Users/Modify.html:173
+#: html/User/Prefs.html:153
 msgid "Country"
 msgstr "Land"
 
-#: html/Admin/Elements/CreateUserCalled:47 html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditScrip:132 html/Admin/Queues/Template.html:66 html/Elements/QuickCreate:68 html/Ticket/Create.html:165 html/Ticket/Create.html:226
+#: html/Admin/Elements/CreateUserCalled:47
+#: html/Admin/Elements/EditCustomField:84
+#: html/Admin/Elements/EditScrip:132
+#: html/Admin/Queues/Template.html:66
+#: html/Elements/QuickCreate:65
+#: html/Ticket/Create.html:166
+#: html/Ticket/Create.html:233
 msgid "Create"
 msgstr "Erstellen"
 
@@ -1049,28 +1225,34 @@ msgstr "Erstellen"
 msgid "Create Tickets"
 msgstr "Erstelle Anfragen"
 
-#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96
+#: html/Admin/CustomFields/Modify.html:124
+#: html/Admin/Elements/EditCustomField:96
 msgid "Create a CustomField"
 msgstr "Erstelle ein benutzerdefiniertes Feld"
 
-#: html/Admin/Queues/CustomField.html:69
 #. ($QueueObj->Name())
+#: html/Admin/Queues/CustomField.html:69
 msgid "Create a CustomField for queue %1"
-msgstr "Erstelle ein benutzerdefiniertes Feld für den Bereich %1"
+msgstr "Erstelle ein benutzerdefiniertes Feld für den Bereich %1"
 
-#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99
+#: html/Admin/Groups/Modify.html:125
+#: html/Admin/Groups/Modify.html:99
 msgid "Create a new group"
 msgstr "Erstelle eine neue Gruppe"
 
-#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88
+#: html/User/Groups/Modify.html:113
+#: html/User/Groups/Modify.html:88
 msgid "Create a new personal group"
-msgstr "Erstelle eine neue persönliche Gruppe"
+msgstr "Erstelle eine neue persönliche Gruppe"
 
-#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57
+#: html/Ticket/Create.html:47
+#: html/Ticket/Create.html:51
+#: html/Ticket/Create.html:58
 msgid "Create a new ticket"
 msgstr "Erstelle eine neue Anfrage"
 
-#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306
+#: html/Admin/Users/Modify.html:251
+#: html/Admin/Users/Modify.html:306
 msgid "Create a new user"
 msgstr "Erstelle einen neuen Benutzer"
 
@@ -1078,16 +1260,18 @@ msgstr "Erstelle einen neuen Benutzer"
 msgid "Create a queue"
 msgstr "Erstelle einen Bereich"
 
-#: html/Admin/Queues/Scrip.html:80
 #. ($QueueObj->Name)
+#: html/Admin/Queues/Scrip.html:80
 msgid "Create a scrip for queue %1"
-msgstr "Erstelle ein Scrip für den Bereich %1"
+msgstr "Erstelle ein Scrip für den Bereich %1"
 
-#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86
+#: html/Admin/Global/Template.html:90
+#: html/Admin/Queues/Template.html:86
 msgid "Create a template"
 msgstr "Erstelle eine Vorlage"
 
-#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46
+#: html/SelfService/Create.html:46
+#: html/SelfService/CreateTicketInQueue.html:46
 msgid "Create a ticket"
 msgstr "Neue Anfrage"
 
@@ -1103,21 +1287,21 @@ msgstr "Anfrage erzeugen"
 msgid "Create tickets in this queue"
 msgstr "Erstelle Anfragen in diesem Bereich"
 
-#: lib/RT/CustomField_Overlay.pm:101
+#: lib/RT/CustomField_Overlay.pm:106
 msgid "Create, delete and modify custom fields"
-msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder"
+msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder"
 
 #: lib/RT/Queue_Overlay.pm:93
 msgid "Create, delete and modify queues"
-msgstr "Erstelle, lösche und modifiziere Bereich"
+msgstr "Erstelle, lösche und modifiziere Bereich"
 
 #: lib/RT/System.pm:81
 msgid "Create, delete and modify the members of personal groups"
-msgstr "Erstellen, löschen und modifizieren von Mitgliedern persönlicher Gruppen"
+msgstr "Erstellen, löschen und modifizieren von Mitgliedern persönlicher Gruppen"
 
 #: lib/RT/System.pm:82
 msgid "Create, delete and modify users"
-msgstr "Erstellen, löschen und modifizieren von Benutzern"
+msgstr "Erstellen, löschen und modifizieren von Benutzern"
 
 #: lib/RT/System.pm:88
 msgid "CreateSavedSearch"
@@ -1127,15 +1311,26 @@ msgstr "GespeicherteSucheErstellen"
 msgid "CreateTicket"
 msgstr "AnfrageErstellen"
 
-#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145
+#: html/Elements/SelectDateType:47
+#: html/Ticket/Elements/ShowDates:48
+#: lib/RT/Ticket_Overlay.pm:1146
 msgid "Created"
 msgstr "Angelegt"
 
-#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117
 #. ($CustomFieldObj->Name())
+#: html/Admin/CustomFields/Modify.html:137
+#: html/Admin/Elements/EditCustomField:117
 msgid "Created CustomField %1"
 msgstr "Erstelle ein benutzerdefiniertes Feld %1"
 
+#: html/Tools/Reports/Elements/Tabs:63
+msgid "Created in a date range"
+msgstr "Erstellt in einem Zeitraum"
+
+#: html/Tools/Reports/CreatedByDates.html:7
+msgid "Created tickets in period, grouped by status"
+msgstr "Erstellte Tickets einer Periode, sortiert nach Status"
+
 #: html/Search/Elements/PickBasics:102
 msgid "Creator"
 msgstr "Ersteller"
@@ -1148,7 +1343,8 @@ msgstr "Momentane Beziehungen"
 msgid "Current Scrips"
 msgstr "Aktuelle Scrips"
 
-#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63
+#: html/Admin/Groups/Members.html:60
+#: html/User/Groups/Members.html:63
 msgid "Current members"
 msgstr "Aktuelle Mitglieder"
 
@@ -1156,22 +1352,32 @@ msgstr "Aktuelle Mitglieder"
 msgid "Current rights"
 msgstr "Aktuelle Rechte"
 
-#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66
+#: html/Search/Elements/EditQuery:47
+msgid "Current search"
+msgstr "Aktuelle Suche"
+
+#: html/Admin/Queues/People.html:62
+#: html/Ticket/Elements/EditPeople:66
 msgid "Current watchers"
 msgstr "Aktuelle Beobachter"
 
-#: html/Admin/Elements/SystemTabs:61 html/Admin/Elements/Tabs:62 html/Admin/Global/index.html:71 html/Admin/Users/Modify.html:208 html/Admin/index.html:77 html/Ticket/Elements/ShowSummary:57
+#: html/Admin/Elements/SystemTabs:61
+#: html/Admin/Elements/Tabs:62
+#: html/Admin/Global/index.html:71
+#: html/Admin/Users/Modify.html:208
+#: html/Admin/index.html:77
+#: html/Ticket/Elements/ShowSummary:56
 msgid "Custom Fields"
 msgstr "Benutzerdefinierte Felder"
 
-#: html/Admin/CustomFields/index.html:59
 #. ($lookup)
+#: html/Admin/CustomFields/index.html:60
 msgid "Custom Fields for %1"
-msgstr "Benutzerdefinierte Felder für %1"
+msgstr "Benutzerdefinierte Felder für %1"
 
 #: html/Admin/Elements/EditScrip:123
 msgid "Custom action cleanup code"
-msgstr "Benutzerdefinierter Aktions-Aufräum-Code"
+msgstr "Benutzerdefinierter Aktions-Aufräum-Code"
 
 #: html/Admin/Elements/EditScrip:115
 msgid "Custom action preparation code"
@@ -1181,18 +1387,19 @@ msgstr "Benutzerdefinierter Aktions-Vorbereitungs-Code"
 msgid "Custom condition"
 msgstr "Benutzerdefinierte Bedingung"
 
-#: lib/RT/Tickets_Overlay.pm:2147
 #. ($CF->Name)
+#: lib/RT/Tickets_Overlay.pm:2194
 msgid "Custom field %1 has a value."
 msgstr "Benutzerdefiniertes Feld %1 hat einen Wert."
 
-#: lib/RT/Tickets_Overlay.pm:2143
 #. ($CF->Name)
+#: lib/RT/Tickets_Overlay.pm:2190
 msgid "Custom field %1 has no value."
 msgstr "Benutzerdefiniertes Feld %1 hat keinen Wert."
 
-#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740
 #. ($args{'Field'})
+#: lib/RT/Record.pm:1583
+#: lib/RT/Record.pm:1744
 msgid "Custom field %1 not found"
 msgstr "Benutzerdefiniertes Feld %1 nicht gefunden"
 
@@ -1200,28 +1407,41 @@ msgstr "Benutzerdefiniertes Feld %1 nicht gefunden"
 msgid "Custom field not found"
 msgstr "Benutzerdefiniertes Feld nicht gefunden"
 
-#: lib/RT/CustomField_Overlay.pm:1041
 #. ($args{'Content'}, $self->Name)
+#: lib/RT/CustomField_Overlay.pm:1144
 msgid "Custom field value %1 could not be found for custom field %2"
 msgstr "Wert %1 des benutzerdefinierten Feldes %2 konnte nicht gefunden werden"
 
-#: lib/RT/CustomField_Overlay.pm:414
+#: lib/RT/CustomField_Overlay.pm:413
 msgid "Custom field value could not be deleted"
-msgstr "Wert des benutzerdefinierten Felds konnte nicht gelöscht werden"
+msgstr "Wert des benutzerdefinierten Felds konnte nicht gelöscht werden"
 
-#: lib/RT/CustomField_Overlay.pm:1047
+#: lib/RT/CustomField_Overlay.pm:1150
 msgid "Custom field value could not be found"
 msgstr "Wert des benutzerdefinierten Feldes konnte nicht gefunden werden"
 
-#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412
+#: lib/RT/CustomField_Overlay.pm:1152
+#: lib/RT/CustomField_Overlay.pm:411
 msgid "Custom field value deleted"
-msgstr "Wert des benutzerdefinierten Feldes gelöscht"
+msgstr "Wert des benutzerdefinierten Feldes gelöscht"
 
-#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627
+#: html/Elements/SelectGroups:51
+#: html/Elements/SelectUsers:51
+#: lib/RT/Transaction_Overlay.pm:627
 msgid "CustomField"
 msgstr "BenutzerdefiniertesFeld"
 
-#: html/SelfService/Display.html:61 html/Ticket/Create.html:191 html/Ticket/Elements/ShowSummary:76 html/Ticket/Elements/Tabs:116 html/Ticket/ModifyAll.html:65
+#: html/Prefs/MyRT.html:70
+#: html/Prefs/Quicksearch.html:70
+#: html/Prefs/Search.html:75
+msgid "Customize"
+msgstr "Anpassen"
+
+#: html/SelfService/Display.html:61
+#: html/Ticket/Create.html:201
+#: html/Ticket/Elements/ShowSummary:81
+#: html/Ticket/Elements/Tabs:116
+#: html/Ticket/ModifyAll.html:65
 msgid "Dates"
 msgstr "Datumsangaben"
 
@@ -1231,7 +1451,7 @@ msgstr "Dez."
 
 #: etc/initialdata:222
 msgid "Default Autoresponse template"
-msgstr "Standard Vorlage für automatische Antworten"
+msgstr "Standard Vorlage für automatische Antworten"
 
 #: html/Tools/Offline.html:61
 msgid "Default Queue"
@@ -1243,31 +1463,32 @@ msgstr "Standard Klient"
 
 #: etc/initialdata:296
 msgid "Default admin comment template"
-msgstr "Standard Vorlage für Admin-Kommentar"
+msgstr "Standard Vorlage für Admin-Kommentar"
 
 #: etc/initialdata:275
 msgid "Default admin correspondence template"
-msgstr "Standard Vorlage für Admin-Korrespondenz"
+msgstr "Standard Vorlage für Admin-Korrespondenz"
 
 #: etc/initialdata:287
 msgid "Default correspondence template"
-msgstr "Standard Vorlage für Korrespondenz"
+msgstr "Standard Vorlage für Korrespondenz"
 
 #: etc/initialdata:253
 msgid "Default transaction template"
-msgstr "Standard Vorlage für Transaktion"
+msgstr "Standard Vorlage für Transaktion"
 
 #: NOT FOUND IN SOURCE
 msgid "Default: %1/%2 changed from %3 to %4"
-msgstr "Standard: %1/%2 von \"%3\" auf \"%4\" geändert."
+msgstr "Standard: %1/%2 von \"%3\" auf \"%4\" geändert."
 
-#: html/User/Delegation.html:46 html/User/Delegation.html:49
+#: html/User/Delegation.html:46
+#: html/User/Delegation.html:49
 msgid "Delegate rights"
 msgstr "Rechte weitergeben"
 
 #: lib/RT/System.pm:85
 msgid "Delegate specific rights which have been granted to you."
-msgstr "Ihnen gewährte Rechte weitergeben"
+msgstr "Ihnen gewährte Rechte weitergeben"
 
 #: lib/RT/System.pm:85
 msgid "DelegateRights"
@@ -1277,93 +1498,124 @@ msgstr "RechteWeitergabe"
 msgid "Delegation"
 msgstr "Rechteweitergabe"
 
-#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63
+#: html/Admin/Elements/EditScrips:75
+#: html/Search/Elements/EditFormat:103
+#: html/Search/Elements/EditQuery:57
+#: html/Search/Elements/EditSearches:63
+#: html/Widgets/SelectionBox:205
 msgid "Delete"
-msgstr "Löschen"
+msgstr "Löschen"
 
 #: html/Admin/Elements/EditTemplates:79
 msgid "Delete Template"
-msgstr "Vorlage löschen"
+msgstr "Vorlage löschen"
 
-#: lib/RT/SavedSearch.pm:211
 #. ($msg)
+#: lib/RT/SavedSearch.pm:211
 msgid "Delete failed: %1"
-msgstr ""
+msgstr "Löschen fehlgeshlagen: %1"
 
 #: html/Admin/Elements/EditScrips:74
 msgid "Delete selected scrips"
-msgstr "Ausgewähltes Script löschen"
+msgstr "Ausgewähltes Script löschen"
 
 #: lib/RT/Queue_Overlay.pm:115
 msgid "Delete tickets"
-msgstr "Anfragen löschen"
+msgstr "Anfragen löschen"
+
+#: html/Search/Bulk.html:160
+msgid "Delete values"
+msgstr "Werte löschen"
 
 #: lib/RT/Queue_Overlay.pm:115
 msgid "DeleteTicket"
-msgstr "AnfrageLöschen"
+msgstr "AnfrageLöschen"
 
 #: lib/RT/SavedSearch.pm:209
 msgid "Deleted search"
-msgstr ""
+msgstr "Suche löschen"
 
 # Are these three strings really different?
 #: NOT FOUND IN SOURCE
 msgid "Deleting this object could break referential integrity"
-msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
+msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
 
 #: lib/RT/Queue_Overlay.pm:391
 msgid "Deleting this object would break referential integrity"
-msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
+msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
 
 #: lib/RT/User_Overlay.pm:513
 msgid "Deleting this object would violate referential integrity"
-msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
+msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen"
 
-#: html/Approvals/Elements/Approve:66
+#: html/Approvals/Elements/Approve:69
 msgid "Deny"
 msgstr "Ablehnen"
 
-#: html/Elements/EditLinks:138 html/Elements/EditLinks:66 html/Elements/ShowLinks:58 html/Ticket/Create.html:212 html/Ticket/Elements/BulkLinks:56 html/Ticket/Elements/ShowDependencies:53
+#: html/Elements/EditLinks:140
+#: html/Elements/EditLinks:66
+#: html/Elements/ShowLinks:58
+#: html/Ticket/Create.html:219
+#: html/Ticket/Elements/BulkLinks:56
+#: html/Ticket/Elements/ShowDependencies:53
 msgid "Depended on by"
 msgstr "Ist Voraussetzung von"
 
-#: lib/RT/Transaction_Overlay.pm:707
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:707
 msgid "Dependency by %1 added"
-msgstr "Als Voraussetzung von %1 hinzugefügt"
+msgstr "Als Voraussetzung von %1 hinzugefügt"
 
-#: lib/RT/Transaction_Overlay.pm:747
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:747
 msgid "Dependency by %1 deleted"
-msgstr "Als Voraussetzung von %1 gelöscht"
+msgstr "Als Voraussetzung von %1 gelöscht"
 
-#: lib/RT/Transaction_Overlay.pm:704
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:704
 msgid "Dependency on %1 added"
 msgstr "Setzt jetzt %1 voraus"
 
-#: lib/RT/Transaction_Overlay.pm:744
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:744
 msgid "Dependency on %1 deleted"
 msgstr "Setzt %1 nicht mehr voraus "
 
-#: html/Elements/EditLinks:134 html/Elements/EditLinks:57 html/Elements/SelectLinkType:48 html/Elements/ShowLinks:48 html/Ticket/Create.html:211 html/Ticket/Elements/BulkLinks:52 html/Ticket/Elements/ShowDependencies:46
+#: html/Elements/EditLinks:136
+#: html/Elements/EditLinks:57
+#: html/Elements/SelectLinkType:48
+#: html/Elements/ShowLinks:48
+#: html/Ticket/Create.html:218
+#: html/Ticket/Elements/BulkLinks:52
+#: html/Ticket/Elements/ShowDependencies:46
 msgid "Depends on"
 msgstr "Voraussetzungen"
 
-#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78
+#: html/Elements/SelectSortOrder:56
+#: html/Search/Elements/DisplayOptions:78
 msgid "Descending"
 msgstr "absteigend"
 
-#: html/SelfService/Create.html:100 html/Ticket/Create.html:149
+#: html/SelfService/Create.html:100
+#: html/Ticket/Create.html:150
 msgid "Describe the issue below"
 msgstr "Beschreiben Sie hier das Problem"
 
-#: html/Admin/CustomFields/Modify.html:61 html/Admin/Elements/AddCustomFieldValue:57 html/Admin/Elements/EditCustomField:60 html/Admin/Elements/EditCustomFieldValues:56 html/Admin/Elements/EditScrip:56 html/Admin/Elements/ModifyTemplate:57 html/Admin/Groups/Modify.html:71 html/Admin/Queues/Modify.html:69 html/Search/Elements/EditSearches:56 html/User/Groups/Modify.html:70
+#: html/Admin/CustomFields/Modify.html:61
+#: html/Admin/Elements/AddCustomFieldValue:57
+#: html/Admin/Elements/EditCustomField:60
+#: html/Admin/Elements/EditCustomFieldValues:56
+#: html/Admin/Elements/EditScrip:56
+#: html/Admin/Elements/ModifyTemplate:57
+#: html/Admin/Groups/Modify.html:71
+#: html/Admin/Queues/Modify.html:69
+#: html/Search/Elements/EditSearches:56
+#: html/User/Groups/Modify.html:70
 msgid "Description"
 msgstr "Beschreibung"
 
-#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108
+#: html/Search/Elements/EditFormat:71
+#: html/Ticket/Elements/Tabs:108
 msgid "Display"
 msgstr "Anzeige"
 
@@ -1377,11 +1629,11 @@ msgstr "Spalten anzeigen"
 
 #: lib/RT/Queue_Overlay.pm:100
 msgid "Display Scrip templates for this queue"
-msgstr "Zeige Scrip-Vorlagen für diesen Bereich"
+msgstr "Zeige Scrip-Vorlagen für diesen Bereich"
 
 #: lib/RT/Queue_Overlay.pm:103
 msgid "Display Scrips for this queue"
-msgstr "Zeige Scrips für diesen Bereich"
+msgstr "Zeige Scrips für diesen Bereich"
 
 #: html/Ticket/Elements/ShowHistory:56
 msgid "Display mode"
@@ -1389,19 +1641,19 @@ msgstr "Anzeigemodus"
 
 #: lib/RT/Group_Overlay.pm:176
 msgid "Display saved searches for this group"
-msgstr "Gespeicherte Suchanfragen für diese Gruppe anzeigen"
+msgstr "Gespeicherte Suchanfragen für diese Gruppe anzeigen"
 
-#: html/Elements/Footer:60
+#: html/Elements/Footer:67
 msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>"
-msgstr ""
+msgstr "Herausgegeben unter version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> der GNU GPL.</a>"
 
 #: lib/RT/System.pm:76
 msgid "Do anything and everything"
 msgstr "Mache irgend etwas und alles"
 
-#: html/Search/Build.html:112
+#: NOT FOUND IN SOURCE
 msgid "Do the Search"
-msgstr "Suche durchführen"
+msgstr "Suche durchführen"
 
 #: html/Elements/Refresh:51
 msgid "Don't refresh this page."
@@ -1411,32 +1663,52 @@ msgstr "Diese Seite nicht aktualisieren."
 msgid "Download"
 msgstr "Herunterladen"
 
-#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64
+#: html/Admin/Groups/index.html:61
+#: html/Admin/Users/index.html:64
 msgid "Download as a tab-delimited file"
 msgstr "Als Tabulator separierte Datei speichern"
 
-#: html/Elements/SelectDateType:53 html/Ticket/Create.html:197 html/Ticket/Elements/EditDates:66 html/Ticket/Elements/ShowDates:64 lib/RT/Ticket_Overlay.pm:1149
+#: html/Elements/SelectDateType:53
+#: html/Ticket/Create.html:207
+#: html/Ticket/Elements/EditDates:66
+#: html/Ticket/Elements/Reminders:86
+#: html/Ticket/Elements/ShowDates:64
+#: lib/RT/Ticket_Overlay.pm:1150
 msgid "Due"
-msgstr "Fällig"
+msgstr "Fällig"
+
+#: html/Elements/Quicksearch:48
+#: html/Elements/ShowSearch:49
+#: html/index.html:76
+msgid "Edit"
+msgstr "Ändere"
+
+#: html/Search/Bulk.html:149
+msgid "Edit Custom Fields"
+msgstr "Benutzerdefinierte Felder verändern"
 
-#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64
 #. ($Object->Name)
+#: html/Admin/Elements/ObjectCustomFields:92
+#: html/Admin/Queues/CustomFields.html:64
+#: html/Admin/Users/CustomFields.html:64
 msgid "Edit Custom Fields for %1"
-msgstr "Bearbeite benutzerdefinierte Felder für %1"
+msgstr "Bearbeite benutzerdefinierte Felder für %1"
 
 #: html/Admin/Global/CustomFields/Groups.html:9
 msgid "Edit Custom Fields for all groups"
-msgstr ""
+msgstr "Benutzerdefinierte Felder für alle Gruppen verändern"
 
 #: html/Admin/Global/CustomFields/Users.html:9
 msgid "Edit Custom Fields for all users"
-msgstr ""
+msgstr "Benutzerdefinierte Felder für alle Benutzer verändern"
 
-#: html/Admin/Global/CustomFields/Queue-Tickets.html:9 html/Admin/Global/CustomFields/Queue-Transactions.html:9
+#: html/Admin/Global/CustomFields/Queue-Tickets.html:9
+#: html/Admin/Global/CustomFields/Queue-Transactions.html:9
 msgid "Edit Custom Fields for tickets in all queues"
-msgstr ""
+msgstr "Benutzerdefinierte Felder von Tickets in allen Stapeln verändern"
 
-#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57
+#: html/Search/Bulk.html:189
+#: html/Ticket/ModifyLinks.html:57
 msgid "Edit Links"
 msgstr "Bearbeite Beziehungen"
 
@@ -1444,16 +1716,21 @@ msgstr "Bearbeite Beziehungen"
 msgid "Edit Query"
 msgstr "Bearbeite Suche"
 
-#: html/Admin/Queues/Templates.html:63
+#: html/Ticket/Elements/Tabs:207
+msgid "Edit Search"
+msgstr "Suche editieren"
+
 #. ($QueueObj->Name)
+#: html/Admin/Queues/Templates.html:63
 msgid "Edit Templates for queue %1"
-msgstr "Bearbeite Vorlagen für den Bereich %1"
+msgstr "Bearbeite Vorlagen für den Bereich %1"
 
 #: lib/RT/Group_Overlay.pm:175
 msgid "Edit saved searches for this group"
-msgstr "Bearbeite gespeicherte Suchanfragen für diese Gruppe"
+msgstr "Bearbeite gespeicherte Suchanfragen für diese Gruppe"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67
+#: html/Admin/Elements/GlobalCustomFieldTabs:60
+#: html/Admin/Global/index.html:67
 msgid "Edit system templates"
 msgstr "Bearbeite Systemvorlagen"
 
@@ -1461,31 +1738,35 @@ msgstr "Bearbeite Systemvorlagen"
 msgid "EditSavedSearches"
 msgstr "GespeicherteSucheEditieren"
 
-#: html/Admin/Queues/Modify.html:140
 #. ($QueueObj->Name)
+#: html/Admin/Queues/Modify.html:140
 msgid "Editing Configuration for queue %1"
-msgstr "Bearbeite Konfiguration für den Bereich %1"
+msgstr "Bearbeite Konfiguration für den Bereich %1"
 
-#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120
 #. ($CustomFieldObj->Name())
+#: html/Admin/CustomFields/Modify.html:141
+#: html/Admin/Elements/EditCustomField:120
 msgid "Editing CustomField %1"
 msgstr "Bearbeite benutzerdefiniertes Feld %1"
 
-#: html/Admin/Groups/Members.html:53
 #. ($Group->Name)
+#: html/Admin/Groups/Members.html:53
 msgid "Editing membership for group %1"
-msgstr "Bearbeite Mitgliedschaft für die Gruppe %1"
+msgstr "Bearbeite Mitgliedschaft für die Gruppe %1"
 
-#: html/User/Groups/Members.html:150
 #. ($Group->Name)
+#: html/User/Groups/Members.html:150
 msgid "Editing membership for personal group %1"
-msgstr "Bearbeite Mitgliedschaft der persönlichen Gruppe %1"
+msgstr "Bearbeite Mitgliedschaft der persönlichen Gruppe %1"
 
-#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358
+#: lib/RT/Record.pm:1285
+#: lib/RT/Record.pm:1362
 msgid "Either base or target must be specified"
 msgstr "Es muss entweder eine Basis oder ein Ziel angegeben werden"
 
-#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65
+#: html/Admin/Users/Modify.html:74
+#: html/Ticket/Elements/AddWatchers:77
+#: html/User/Prefs.html:65
 msgid "Email"
 msgstr "E-Mail"
 
@@ -1493,30 +1774,36 @@ msgstr "E-Mail"
 msgid "Email address in use"
 msgstr "E-Mail-Adresse bereits in Gebrauch"
 
-# ## muss das überhaupt übersetzt werden???
-#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72
+# ## muss das überhaupt übersetzt werden???
+#: html/Admin/CustomFields/Modify.html:98
+#: html/Admin/Elements/EditCustomField:72
 msgid "Enabled (Unchecking this box disables this custom field)"
-msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdefinierte Feld)"
+msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdefinierte Feld)"
 
-#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74
+#: html/Admin/Groups/Modify.html:84
+#: html/User/Groups/Modify.html:74
 msgid "Enabled (Unchecking this box disables this group)"
-msgstr "Aktiviert (Abwählen deaktiviert diese Gruppe)"
+msgstr "Aktiviert (Abwählen deaktiviert diese Gruppe)"
 
 #: html/Admin/Queues/Modify.html:105
 msgid "Enabled (Unchecking this box disables this queue)"
-msgstr "Aktiviert (Abwählen deaktiviert diesen Bereich)"
+msgstr "Aktiviert (Abwählen deaktiviert diesen Bereich)"
 
 #: html/Admin/Queues/index.html:78
 msgid "Enabled Queues"
 msgstr "Aktivierte Bereiche"
 
-#: html/Admin/Elements/EditCustomField:136 html/Admin/Groups/Modify.html:150 html/Admin/Users/Modify.html:342 html/User/Groups/Modify.html:138
 #. (loc_fuzzy($msg))
+#: html/Admin/Elements/EditCustomField:136
+#: html/Admin/Groups/Modify.html:150
+#: html/Admin/Users/Modify.html:342
+#: html/User/Groups/Modify.html:138
 msgid "Enabled status %1"
 msgstr "Status aktiviert: %1"
 
-#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162
 #. (loc_fuzzy($msg))
+#: html/Admin/CustomFields/Modify.html:159
+#: html/Admin/Queues/Modify.html:162
 msgid "Enabled status: %1"
 msgstr "Status aktiviert: %1"
 
@@ -1524,45 +1811,48 @@ msgstr "Status aktiviert: %1"
 msgid "Enter multiple values"
 msgstr "Mehrere Werte eingeben"
 
-#: html/Elements/EditLinks:124
+#: html/Elements/EditLinks:126
 msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces."
-msgstr ""
+msgstr "Gib Objekte oder URI's ein um zu anderen Objekten zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
 
 #: lib/RT/CustomField_Overlay.pm:65
 msgid "Enter one value"
 msgstr "Einen Wert eingeben"
 
-#: html/Elements/EditLinks:121
+#: html/Elements/EditLinks:123
 msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces."
-msgstr ""
+msgstr "Gib Stapel oder URI's ein um zu anderen Stapeln zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
 
-#: html/Elements/EditLinks:117 html/Search/Bulk.html:174
+#: html/Elements/EditLinks:119
+#: html/Search/Bulk.html:190
 msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces."
-msgstr ""
+msgstr "Gib Anfragen oder URI's ein um zu anderen Anfragen zu verlinken. Trenne mehrere Einträge mit Leerzeichen."
 
 #: lib/RT/CustomField_Overlay.pm:66
 msgid "Enter up to %1 values"
 msgstr "Gib bis zu %1 Werte ein"
 
-#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47
+#: html/Elements/Login:67
+#: html/SelfService/Error.html:46
+#: html/SelfService/Error.html:47
 msgid "Error"
 msgstr "Fehler"
 
-# Queue->AddWatcher ist ein Code-Teil, nicht übersetzen
+# Queue->AddWatcher ist ein Code-Teil, nicht übersetzen
 #: lib/RT/Queue_Overlay.pm:669
 msgid "Error in parameters to Queue->AddWatcher"
 msgstr "Fehler in den Parametern zu Queue->AddWatcher"
 
-# Queue->DeleteWatcher ist ein Code-Teil, nicht übersetzen
+# Queue->DeleteWatcher ist ein Code-Teil, nicht übersetzen
 #: lib/RT/Queue_Overlay.pm:830
 msgid "Error in parameters to Queue->DeleteWatcher"
 msgstr "Fehler in den Parametern zu Queue->DeleteWatcher"
 
-#: lib/RT/Ticket_Overlay.pm:1333
+#: lib/RT/Ticket_Overlay.pm:1334
 msgid "Error in parameters to Ticket->AddWatcher"
 msgstr "Fehler in den Parametern zu Ticket->AddWatcher"
 
-#: lib/RT/Ticket_Overlay.pm:1499
+#: lib/RT/Ticket_Overlay.pm:1500
 msgid "Error in parameters to Ticket->DeleteWatcher"
 msgstr "Fehler in den Parametern zu Ticket->DeleteWatcher"
 
@@ -1572,7 +1862,7 @@ msgstr "Anfragen eskalieren"
 
 #: html/Ticket/Elements/ShowBasics:57
 msgid "Estimated"
-msgstr "Geschätzt"
+msgstr "Geschätzt"
 
 #: etc/initialdata:20
 msgid "Everyone"
@@ -1588,7 +1878,7 @@ msgstr "Zusatzinformationen"
 
 #: lib/RT/SavedSearch.pm:165
 msgid "Failed to create search attribute"
-msgstr ""
+msgstr "Such Attribut konnte nicht erstellt werden"
 
 #: lib/RT/User_Overlay.pm:377
 msgid "Failed to find 'Privileged' users pseudogroup."
@@ -1598,15 +1888,15 @@ msgstr "Konnte die Pseudogruppe 'Privileged' nicht finden."
 msgid "Failed to find 'Unprivileged' users pseudogroup"
 msgstr "Konnte die Pseudogruppe 'Unprivileged' nicht finden."
 
-#: bin/rt-crontool:163
 #. ($modname, $@)
+#: bin/rt-crontool:163
 msgid "Failed to load module %1. (%2)"
 msgstr "Konnte Modul %1 nicht laden. (%2)"
 
-#: lib/RT/SavedSearch.pm:168
 #. ($privacy)
+#: lib/RT/SavedSearch.pm:168
 msgid "Failed to load object for %1"
-msgstr ""
+msgstr "Objekt %1 konnte nicht geladen werden"
 
 #: lib/RT/Date.pm:438
 msgid "Feb."
@@ -1618,47 +1908,52 @@ msgstr "Dateiname"
 
 #: lib/RT/CustomField_Overlay.pm:69
 msgid "Fill in multiple text areas"
-msgstr "Mehrere Textfelder füllen"
+msgstr "Mehrere Textfelder füllen"
 
 #: lib/RT/CustomField_Overlay.pm:74
 msgid "Fill in multiple wikitext areas"
-msgstr ""
+msgstr "Schreibe mehrere Wikitext Bereiche"
 
 #: lib/RT/CustomField_Overlay.pm:70
 msgid "Fill in one text area"
-msgstr "Ein Textfeld füllen"
+msgstr "Ein Textfeld füllen"
 
 #: lib/RT/CustomField_Overlay.pm:75
 msgid "Fill in one wikitext area"
-msgstr ""
+msgstr "Schreibe einen Wikitext Bereich"
 
 #: lib/RT/CustomField_Overlay.pm:71
 msgid "Fill in up to %1 text areas"
-msgstr "%1 Textfelder füllen"
+msgstr "%1 Textfelder füllen"
 
 #: lib/RT/CustomField_Overlay.pm:76
 msgid "Fill in up to %1 wikitext areas"
-msgstr ""
+msgstr "Schreibe bis zu %1 Wikitext Bereiche"
 
-#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569
+#: html/Search/Elements/PickBasics:149
+#: html/Ticket/Create.html:180
+#: html/Ticket/Elements/EditBasics:92
+#: lib/RT/Tickets_Overlay.pm:1616
 msgid "Final Priority"
-msgstr "Endpriorität"
+msgstr "Endpriorität"
 
-#: lib/RT/Ticket_Overlay.pm:1140
+#: lib/RT/Ticket_Overlay.pm:1141
 msgid "FinalPriority"
-msgstr "EndPriorität"
+msgstr "EndPriorität"
 
-#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55
+#: html/Admin/Groups/index.html:72
+#: html/Admin/Queues/People.html:82
+#: html/Ticket/Elements/EditPeople:55
 msgid "Find groups whose"
 msgstr "Finde Gruppen dessen"
 
-msgid" Find groups whose"
-msgstr "Finde Gruppen dessen"
-#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51
+#: html/Admin/Queues/People.html:78
+#: html/Admin/Users/index.html:70
+#: html/Ticket/Elements/EditPeople:51
 msgid "Find people whose"
 msgstr "Finde Leute deren"
 
-#: html/Search/Results.html:109
+#: html/Search/Results.html:144
 msgid "Find tickets"
 msgstr "Anfragen suchen"
 
@@ -1666,28 +1961,30 @@ msgstr "Anfragen suchen"
 msgid "First"
 msgstr "Erste"
 
-#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766
+#: docs/design_docs/string-extraction-guide.txt:33
+#: lib/RT/StyleGuide.pod:766
 msgid "Foo Bar Baz"
 msgstr "Foo Bar Baz"
 
-#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757
+#: docs/design_docs/string-extraction-guide.txt:24
+#: lib/RT/StyleGuide.pod:757
 msgid "Foo!"
 msgstr "Foo!"
 
-#: html/Search/Bulk.html:105
+#: html/Search/Bulk.html:83
 msgid "Force change"
-msgstr "Änderung erzwingen"
+msgstr "Änderung erzwingen"
 
 #: html/Search/Elements/EditFormat:52
 msgid "Format"
-msgstr ""
+msgstr "Format"
 
-#: html/Search/Results.html:107
 #. ($ticketcount)
+#: html/Search/Results.html:142
 msgid "Found %quant(%1,ticket)"
 msgstr "%1 Anfrage(n) gefunden"
 
-#: lib/RT/Record.pm:942
+#: lib/RT/Record.pm:946
 msgid "Found Object"
 msgstr "Objekt gefunden"
 
@@ -1699,7 +1996,8 @@ msgstr "Freie Eingabe"
 msgid "Fri."
 msgstr "Fr."
 
-#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72
+#: html/Ticket/Elements/ShowHistory:62
+#: html/Ticket/Elements/ShowHistory:68
 msgid "Full headers"
 msgstr "Alle Kopfzeilen"
 
@@ -1707,12 +2005,13 @@ msgstr "Alle Kopfzeilen"
 msgid "Get template from file"
 msgstr "Vorlage von Datei nehmen"
 
-#: lib/RT/Transaction_Overlay.pm:673
 #. ($New->Name)
+#: lib/RT/Transaction_Overlay.pm:673
 msgid "Given to %1"
-msgstr "An %1 übergeben"
+msgstr "An %1 übergeben"
 
-#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82
+#: html/Admin/Elements/Tabs:65
+#: html/Admin/index.html:82
 msgid "Global"
 msgstr "Global"
 
@@ -1724,28 +2023,46 @@ msgstr "Globale benutzerdefinierte Felder"
 msgid "Global custom field configuration"
 msgstr "Konfiguration globaler benutzerdefinierter Felder"
 
-#: html/Admin/Elements/SelectTemplate:59
 #. (loc($Template->Name))
+#: html/Admin/Elements/SelectTemplate:59
 msgid "Global template: %1"
 msgstr "Globale Vorlage: %1"
 
+#: html/Admin/CustomFields/index.html:80
+#: html/Search/Results.html:95
 #: html/Tools/Offline.html:91
 msgid "Go"
 msgstr "Start"
 
-#: 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/Search/Results.html:76 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 html/index.html:91
+#: 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
 msgid "Go!"
 msgstr "Los!"
 
-#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46
+#: html/Elements/GotoTicket:46
+#: html/SelfService/Elements/GotoTicket:46
 msgid "Goto ticket"
 msgstr "Zeige Anfrage"
 
-#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99
+#: html/Ticket/Elements/AddWatchers:67
+#: html/Ticket/Elements/ShowGroupMembers:55
+#: html/User/Elements/DelegateRights:99
 msgid "Group"
 msgstr "Gruppe"
 
-#: html/Admin/Elements/CustomFieldTabs:68 html/Admin/Elements/GroupTabs:66 html/Admin/Elements/QueueTabs:82 html/Admin/Elements/SystemTabs:65 html/Admin/Global/index.html:76
+#: html/Admin/Elements/CustomFieldTabs:68
+#: html/Admin/Elements/GroupTabs:66
+#: html/Admin/Elements/QueueTabs:82
+#: html/Admin/Elements/SystemTabs:65
+#: html/Admin/Global/index.html:76
 msgid "Group Rights"
 msgstr "Gruppenrechte"
 
@@ -1753,8 +2070,8 @@ msgstr "Gruppenrechte"
 msgid "Group already has member"
 msgstr "Gruppe hat bereits Mitglieder"
 
-#: html/Admin/Groups/Modify.html:109
 #. ($create_msg)
+#: html/Admin/Groups/Modify.html:109
 msgid "Group could not be created: %1"
 msgstr "Gruppe konnte nicht erstellt werden: %1"
 
@@ -1766,75 +2083,96 @@ msgstr "Gruppe angelegt"
 msgid "Group has no such member"
 msgstr "Gruppe hat kein solches Mitglied"
 
-#: lib/RT/Group_Overlay.pm:971 lib/RT/Queue_Overlay.pm:745 lib/RT/Queue_Overlay.pm:805 lib/RT/Ticket_Overlay.pm:1391 lib/RT/Ticket_Overlay.pm:1471
+#: lib/RT/Group_Overlay.pm:971
+#: lib/RT/Queue_Overlay.pm:745
+#: lib/RT/Queue_Overlay.pm:805
+#: lib/RT/Ticket_Overlay.pm:1392
+#: lib/RT/Ticket_Overlay.pm:1472
 msgid "Group not found"
 msgstr "Gruppe nicht gefunden"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:59 html/Admin/Elements/SelectNewGroupMembers:56 html/Admin/Elements/Tabs:56 html/Admin/Global/CustomFields/index.html:69 html/Admin/Groups/Members.html:85 html/Admin/Queues/People.html:104 html/Admin/Users/Memberships.html:53 html/Admin/index.html:67 html/User/Groups/Members.html:88 lib/RT/CustomField_Overlay.pm:1088
+#: html/Admin/Elements/GlobalCustomFieldTabs:59
+#: html/Admin/Elements/SelectNewGroupMembers:56
+#: html/Admin/Elements/Tabs:56
+#: html/Admin/Global/CustomFields/index.html:69
+#: html/Admin/Groups/Members.html:85
+#: html/Admin/Queues/People.html:104
+#: html/Admin/Users/Memberships.html:53
+#: html/Admin/index.html:67
+#: html/User/Groups/Members.html:88
+#: lib/RT/CustomField_Overlay.pm:1191
 msgid "Groups"
 msgstr "Gruppen"
 
 #: lib/RT/Group_Overlay.pm:997
 msgid "Groups can't be members of their members"
-msgstr "Gruppen können nicht Mitglied eines ihrer Mitglieder sein"
+msgstr "Gruppen können nicht Mitglied eines ihrer Mitglieder sein"
 
 #: html/Admin/Groups/index.html:82
 msgid "Groups matching search criteria"
 msgstr "Gruppen auf die das Suchkriterium passt"
 
-#: html/Ticket/Elements/ShowRequestor:77
+#: html/Ticket/Elements/ShowRequestor:76
 msgid "Groups this user belongs to"
-msgstr "Gruppen zu denen der Benutzer gehört"
+msgstr "Gruppen zu denen der Benutzer gehört"
 
-#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94
+#: lib/RT/Interface/CLI.pm:94
 msgid "Hello!"
 msgstr "Hallo!"
 
-#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773
 #. ($name)
+#: docs/design_docs/string-extraction-guide.txt:40
+#: lib/RT/StyleGuide.pod:773
 msgid "Hello, %1"
 msgstr "Hallo %1"
 
-#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111
+#: html/Admin/Elements/GroupTabs:70
+#: html/Admin/Elements/UserTabs:64
+#: html/Ticket/Elements/ShowHistory:51
+#: html/Ticket/Elements/Tabs:111
 msgid "History"
-msgstr "Geschichte"
+msgstr "Verlauf"
 
-#: html/Admin/Groups/History.html:62
 #. ($GroupObj->Name)
+#: html/Admin/Groups/History.html:62
 msgid "History of the group %1"
-msgstr "Geschichte der Gruppe %1"
+msgstr "Verlauf der Gruppe %1"
 
-#: html/Admin/Users/History.html:62
 #. ($UserObj->Name)
+#: html/Admin/Users/History.html:62
 msgid "History of the user %1"
-msgstr "Geschichte des Benutzers %1"
+msgstr "Verlauf des Benutzers %1"
 
 #: html/Elements/Tabs:65
 msgid "Homepage"
-msgstr "Start"
+msgstr "Startseite"
+
+#: html/Elements/SelectTimeUnits:48
+msgid "Hours"
+msgstr "Stunden"
 
-#: lib/RT/Base.pm:110
 #. (6)
+#: lib/RT/Base.pm:110
 msgid "I have %quant(%1,concrete mixer)."
 msgstr "Ich habe %quant(%1, Betonmischer)"
 
-#: html/Search/Build.html:637
+#: html/Search/Build.html:615
 msgid "I'm lost"
 msgstr "Ich bin verwirrt"
 
-#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494
+#: html/Ticket/Elements/ShowBasics:48
+#: lib/RT/Tickets_Overlay.pm:1541
 msgid "Id"
 msgstr "Nr."
 
-#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60
+#: html/Admin/Users/Modify.html:65
+#: html/User/Prefs.html:60
 msgid "Identity"
-msgstr "Identität"
+msgstr "Identität"
 
 #: etc/initialdata:429
 msgid "If an approval is rejected, reject the original and delete pending approvals"
-msgstr ""
-"Wenn eine Freigabe abgewiesen wird, weise das Original ab und lösche "
-"wartende Freigaben"
+msgstr "Wenn eine Freigabe abgewiesen wird, weise das Original ab und lösche wartende Freigaben"
 
 #: html/Tools/Offline.html:74
 msgid "If no Requestor is specified, create tickets with this requestor."
@@ -1846,23 +2184,26 @@ msgstr "Wenn kein Bereich spezifiziert ist, dann generiere das Anfrage in diesem
 
 #: bin/rt-crontool:215
 msgid "If this tool were setgid, a hostile local user could use this tool to gain administrative access to RT."
-msgstr ""
+msgstr "Wenn dieses Programm setgid ist, könnte ein böswilliger lokaler Nutzer Administrator Rechte auf dem RT bekommen."
 
-#: html/Admin/Queues/People.html:126 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:128 html/Ticket/ModifyPeople.html:59
+#: html/Admin/Queues/People.html:126
+#: html/Ticket/Modify.html:60
+#: html/Ticket/ModifyAll.html:128
+#: html/Ticket/ModifyPeople.html:59
 msgid "If you've updated anything above, be sure to"
 msgstr "Wenn Sie etwas aktualisiert haben, denken Sie daran hier zu speichern"
 
-#: lib/RT/Record.pm:933
+#: lib/RT/Record.pm:937
 msgid "Illegal value for %1"
-msgstr "Unerlaubter Wert für %1"
+msgstr "Unerlaubter Wert für %1"
 
 #: NOT FOUND IN SOURCE
 msgid "Image"
 msgstr "Bild"
 
-#: lib/RT/Record.pm:936
+#: lib/RT/Record.pm:940
 msgid "Immutable field"
-msgstr "Unveränderbares Feld"
+msgstr "Unveränderbares Feld"
 
 #: html/Admin/Groups/index.html:65
 msgid "Include disabled groups in listing."
@@ -1876,75 +2217,94 @@ msgstr "Zeige auch deaktivierte Bereiche an."
 msgid "Include disabled users in search."
 msgstr "Zeige deaktivierte Benutzer auch in der Suche an."
 
-#: html/Search/Build.html:663
+#: html/Search/Build.html:641
 msgid "Incomplete Query"
-msgstr "Unvollständige Suche"
+msgstr "Unvollständige Suche"
 
-#: html/Search/Build.html:660
+#: html/Search/Build.html:638
 msgid "Incomplete query"
-msgstr "Unvollständige Anfrage"
+msgstr "Unvollständige Anfrage"
 
-#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544
+#: html/Search/Elements/PickBasics:148
+#: lib/RT/Tickets_Overlay.pm:1591
 msgid "Initial Priority"
-msgstr "Anfängliche Priorität"
+msgstr "Anfängliche Priorität"
 
-#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141
+#: lib/RT/Ticket_Overlay.pm:1140
+#: lib/RT/Ticket_Overlay.pm:1142
 msgid "InitialPriority"
-msgstr "AnfänglichePriorität"
+msgstr "AnfänglichePriorität"
 
 #: lib/RT/ScripAction_Overlay.pm:134
 msgid "Input error"
 msgstr "Eingabefehler"
 
-#: lib/RT/Ticket_Overlay.pm:3454
+#. ($self->FriendlyPattern)
+#. ($CF->FriendlyPattern)
+#: html/Elements/ValidateCustomFields:23
+#: lib/RT/CustomField_Overlay.pm:1008
+msgid "Input must match %1"
+msgstr "Eingabe muss mit %1 übereinstimmen"
+
+#: lib/RT/Ticket_Overlay.pm:3437
 msgid "Internal Error"
 msgstr "Interner Fehler"
 
-#: lib/RT/Record.pm:305
 #. ($id->{error_message})
+#: lib/RT/Record.pm:309
 msgid "Internal Error: %1"
 msgstr "Interner Fehler: %1"
 
 #: lib/RT/Group_Overlay.pm:676
 msgid "Invalid Group Type"
-msgstr "Ungültige Gruppenart"
+msgstr "Ungültige Gruppenart"
 
 #: lib/RT/Principal_Overlay.pm:161
 msgid "Invalid Right"
-msgstr "Ungültiges Recht"
+msgstr "Ungültiges Recht"
 
-#: lib/RT/Record.pm:938
+#: lib/RT/Record.pm:942
 msgid "Invalid data"
-msgstr "Ungültige Daten"
+msgstr "Ungültige Daten"
 
-#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276
+#. ($msg)
+#: lib/RT/CustomField_Overlay.pm:202
+#: lib/RT/CustomField_Overlay.pm:666
+msgid "Invalid pattern: %1"
+msgstr "Ungültiges Muster: %1"
+
+#: lib/RT/Scrip_Overlay.pm:158
+#: lib/RT/Template_Overlay.pm:276
 msgid "Invalid queue"
-msgstr "Ungültiger Bereich"
+msgstr "Ungültiger Bereich"
 
-#: lib/RT/ACE_Overlay.pm:265 lib/RT/ACE_Overlay.pm:274 lib/RT/ACE_Overlay.pm:280 lib/RT/ACE_Overlay.pm:291
+#: lib/RT/ACE_Overlay.pm:265
+#: lib/RT/ACE_Overlay.pm:274
+#: lib/RT/ACE_Overlay.pm:280
+#: lib/RT/ACE_Overlay.pm:291
 msgid "Invalid right"
-msgstr "Ungültiges Recht"
+msgstr "Ungültiges Recht"
 
-#: lib/RT/Record.pm:280
 #. ($key)
+#: lib/RT/Record.pm:284
 msgid "Invalid value for %1"
-msgstr "Ungültiger Wert für %1"
+msgstr "Ungültiger Wert für %1"
 
-#: lib/RT/Record.pm:1597
+#: lib/RT/Record.pm:1601
 msgid "Invalid value for custom field"
-msgstr "Ungültiger Wert für das benutzerdefinierte Feld"
+msgstr "Ungültiger Wert für das benutzerdefinierte Feld"
 
-#: lib/RT/Ticket_Overlay.pm:413
+#: lib/RT/Ticket_Overlay.pm:414
 msgid "Invalid value for status"
-msgstr "Ungültiger Statuswert"
+msgstr "Ungültiger Statuswert"
 
 #: bin/rt-crontool:216
 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool."
-msgstr ""
+msgstr "Es ist wichtig, dass nicht authorisierte Benutzer dieses Programm nicht starten können."
 
 #: bin/rt-crontool:217
 msgid "It is suggested that you create a non-privileged unix user with the correct group membership and RT access to run this tool."
-msgstr ""
+msgstr "Es wird empfohlen einen nicht priviligierten Unix User mit korrekten Gruppenrechten anzulegen um dieses Programm zu nutzen."
 
 #: bin/rt-crontool:188
 msgid "It takes several arguments:"
@@ -1966,7 +2326,7 @@ msgstr "Betrete oder verlasse diese Gruppe"
 msgid "Jul."
 msgstr "Jul."
 
-#: html/Ticket/Elements/Tabs:122
+#: html/Ticket/Elements/Tabs:124
 msgid "Jumbo"
 msgstr "Alles"
 
@@ -1974,19 +2334,21 @@ msgstr "Alles"
 msgid "Jun."
 msgstr "Jun."
 
-#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76
+#: html/Admin/Users/Modify.html:94
+#: html/User/Prefs.html:76
 msgid "Language"
 msgstr "Sprache"
 
 #: html/Search/Elements/EditFormat:79
 msgid "Large"
-msgstr "Groß"
+msgstr "Groß"
 
 #: html/Ticket/Elements/Tabs:96
 msgid "Last"
 msgstr "Letzter Kontakt"
 
-#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60
+#: html/Ticket/Elements/EditDates:59
+#: html/Ticket/Elements/ShowDates:60
 msgid "Last Contact"
 msgstr "Letzter Kontakt"
 
@@ -2008,7 +2370,7 @@ msgstr "Links"
 
 #: html/Admin/Users/Modify.html:109
 msgid "Let this user access RT"
-msgstr "Diesem Benutzer RT-Zugriff gewähren"
+msgstr "Diesem Benutzer RT-Zugriff gewähren"
 
 #: html/Admin/Users/Modify.html:113
 msgid "Let this user be granted rights"
@@ -2016,36 +2378,40 @@ msgstr "Diesem Benutzer Rechte zuweisen lassen"
 
 #: html/Search/Elements/EditFormat:68
 msgid "Link"
-msgstr ""
+msgstr "Link"
 
-#: lib/RT/Record.pm:1292
+#: lib/RT/Record.pm:1296
 msgid "Link already exists"
 msgstr "Beziehung existiert bereits"
 
-#: lib/RT/Record.pm:1306
+#: lib/RT/Record.pm:1310
 msgid "Link could not be created"
 msgstr "Beziehung konnte nicht erstellt werden"
 
-#: lib/RT/Record.pm:1312
 #. ($TransString)
+#: lib/RT/Record.pm:1316
 msgid "Link created (%1)"
 msgstr "Beziehung erstellt (%1)"
 
-#: lib/RT/Record.pm:1373
 #. ($TransString)
+#: lib/RT/Record.pm:1377
 msgid "Link deleted (%1)"
-msgstr "Beziehung gelöscht (%1)"
+msgstr "Beziehung gelöscht (%1)"
 
-#: lib/RT/Record.pm:1379
+#: lib/RT/Record.pm:1383
 msgid "Link not found"
 msgstr "Beziehung nicht gefunden"
 
-#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50
 #. ($Ticket->Id)
+#: html/Ticket/ModifyLinks.html:46
+#: html/Ticket/ModifyLinks.html:50
 msgid "Link ticket #%1"
 msgstr "Verweise auf Anfrage #%1"
 
-#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78
+#: html/Ticket/Create.html:214
+#: html/Ticket/Elements/ShowSummary:87
+#: html/Ticket/Elements/Tabs:120
+#: html/Ticket/ModifyAll.html:78
 msgid "Links"
 msgstr "Beziehungen"
 
@@ -2065,76 +2431,83 @@ msgstr "GespeicherteSucheLaden"
 msgid "Loaded perl modules"
 msgstr "Geladene Perl Module"
 
-#: lib/RT/SavedSearch.pm:112
 #. ($self->Name)
+#: lib/RT/SavedSearch.pm:112
 msgid "Loaded search %1"
-msgstr ""
+msgstr "Geladene Suche %1"
 
-#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126
+#: html/Admin/Users/Modify.html:138
+#: html/User/Prefs.html:126
 msgid "Location"
 msgstr "Adresse"
 
-#: lib/RT.pm:212
 #. ($RT::LogDir)
-msgid "Log directory %1 not found or couldn't be written.\\n RT can't run."
+#: lib/RT.pm:212
+msgid ""
+"Log directory %1 not found or couldn't be written.\\n"
+" RT can't run."
 msgstr ""
-"Log-Verzeichnis %1 nicht gefunden oder kein Schreibzugriff.\\n RT kann nicht "
-"starten."
+"Log-Verzeichnis %1 nicht gefunden oder kein Schreibzugriff.\\n"
+" RT kann nicht starten."
 
-#: html/Elements/Header:94
-#. ("<b>".$session{'CurrentUser'}->Name."</b>")
+#. ("<span>".$session{'CurrentUser'}->Name."</span>")
+#: html/Elements/Header:82
 msgid "Logged in as %1"
 msgstr "Angemeldet als %1"
 
-#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:57 html/Elements/Login:66 html/Elements/Login:76 lib/RT/StyleGuide.pod:797
+#: docs/design_docs/string-extraction-guide.txt:71
+#: html/Elements/Login:57
+#: html/Elements/Login:73
+#: html/Elements/Login:89
+#: lib/RT/StyleGuide.pod:797
 msgid "Login"
 msgstr "Anmelden"
 
-#: html/Elements/Header:91
+#: html/Elements/Header:92
 msgid "Logout"
 msgstr "Abmelden"
 
-#: lib/RT/CustomField_Overlay.pm:866
+#: lib/RT/CustomField_Overlay.pm:920
 msgid "Lookup type mismatch"
 msgstr "Suchtyp unpassend"
 
-#: html/Search/Bulk.html:104
+#: html/Search/Bulk.html:82
 msgid "Make Owner"
 msgstr "Besitzer festlegen"
 
-#: html/Search/Bulk.html:128
+#: html/Search/Bulk.html:106
 msgid "Make Status"
 msgstr "Status festlegen"
 
-#: html/Search/Bulk.html:136
+#: html/Search/Bulk.html:114
 msgid "Make date Due"
-msgstr "Fälligkeitsdatum festlegen"
+msgstr "Fälligkeitsdatum festlegen"
 
-#: html/Search/Bulk.html:138
+#: html/Search/Bulk.html:116
 msgid "Make date Resolved"
 msgstr "Erledigungsdatum festlegen"
 
-#: html/Search/Bulk.html:132
+#: html/Search/Bulk.html:110
 msgid "Make date Started"
 msgstr "Anfangsdatum festlegen"
 
-#: html/Search/Bulk.html:130
+#: html/Search/Bulk.html:108
 msgid "Make date Starts"
 msgstr "Startdatum festlegen"
 
-#: html/Search/Bulk.html:134
+#: html/Search/Bulk.html:112
 msgid "Make date Told"
 msgstr "Eingangsdatum festlegen"
 
-#: html/Search/Bulk.html:124
+#: html/Search/Bulk.html:102
 msgid "Make priority"
-msgstr "Priorität festlegen"
+msgstr "Priorität festlegen"
 
-#: html/Search/Bulk.html:126
+#: html/Search/Bulk.html:104
 msgid "Make queue"
 msgstr "Bereich festlegen"
 
-#: html/Search/Bulk.html:122
+#: html/Search/Bulk.html:100
 msgid "Make subject"
 msgstr "Betreff festlegen"
 
@@ -2152,7 +2525,7 @@ msgstr "Gruppen und Gruppenmitglieder verwalten"
 
 #: html/Admin/index.html:85
 msgid "Manage properties and configuration which apply to all queues"
-msgstr "Eigenschaften und Einstellungen für alle Bereiche verwalten"
+msgstr "Eigenschaften und Einstellungen für alle Bereiche verwalten"
 
 #: html/Admin/index.html:74
 msgid "Manage queues and queue-specific properties"
@@ -2164,302 +2537,339 @@ msgstr "Benutzer und Passworte verwalten"
 
 #: lib/RT/Date.pm:439
 msgid "Mar."
-msgstr "Mär."
+msgstr "Mär."
 
 #: lib/RT/Date.pm:441
 msgid "May."
 msgstr "Mai"
 
-#: lib/RT/Transaction_Overlay.pm:720
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:720
 msgid "Member %1 added"
-msgstr "Mitglied %1 hinzugefügt"
+msgstr "Mitglied %1 hinzugefügt"
 
-#: lib/RT/Transaction_Overlay.pm:760
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:760
 msgid "Member %1 deleted"
-msgstr "Mitglied %1 gelöscht"
+msgstr "Mitglied %1 gelöscht"
 
 #: lib/RT/Group_Overlay.pm:1008
 msgid "Member added"
-msgstr "Mitglied hinzugefügt"
+msgstr "Mitglied hinzugefügt"
 
 #: lib/RT/Group_Overlay.pm:1170
 msgid "Member deleted"
-msgstr "Mitglied gelöscht"
+msgstr "Mitglied gelöscht"
 
 #: lib/RT/Group_Overlay.pm:1174
 msgid "Member not deleted"
-msgstr "Mitglied nicht gelöscht"
+msgstr "Mitglied nicht gelöscht"
 
 #: html/Elements/SelectLinkType:47
 msgid "Member of"
 msgstr "Mitglied von"
 
-#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63
+#: html/Admin/Elements/GroupTabs:63
+#: html/User/Elements/GroupTabs:63
 msgid "Members"
 msgstr "Mitglieder"
 
-#: lib/RT/Transaction_Overlay.pm:717
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:717
 msgid "Membership in %1 added"
-msgstr "Mitgliedschaft in %1 hinzugefügt"
+msgstr "Mitgliedschaft in %1 hinzugefügt"
 
-#: lib/RT/Transaction_Overlay.pm:757
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:757
 msgid "Membership in %1 deleted"
-msgstr "Mitgliedschaft in %1 gelöscht"
+msgstr "Mitgliedschaft in %1 gelöscht"
 
 #: html/Admin/Elements/UserTabs:61
 msgid "Memberships"
 msgstr "Mitgliedschaft"
 
-#: html/Admin/Users/Memberships.html:60
 #. ($UserObj->Name)
+#: html/Admin/Users/Memberships.html:60
 msgid "Memberships of the user %1"
 msgstr "Mitgliedschaft des Benutzers %1"
 
-#: lib/RT/Ticket_Overlay.pm:2849
+#: lib/RT/Ticket_Overlay.pm:2832
 msgid "Merge Successful"
 msgstr "Vereinigung erfolgreich"
 
-#: lib/RT/Ticket_Overlay.pm:2736
+#: lib/RT/Ticket_Overlay.pm:2719
 msgid "Merge failed. Couldn't set EffectiveId"
 msgstr "Vereinigung fehlgeschlagen. Konnte EffectiveId nicht setzen"
 
-#: lib/RT/Ticket_Overlay.pm:2744
+#: lib/RT/Ticket_Overlay.pm:2727
 msgid "Merge failed. Couldn't set Status"
 msgstr "Vereinigung fehlgeschlagen. Konnte Status nicht setzen"
 
-#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48
+#: html/Elements/EditLinks:131
+#: html/Ticket/Elements/BulkLinks:48
 msgid "Merge into"
 msgstr "Vereinigen mit"
 
-#: lib/RT/Transaction_Overlay.pm:723
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:723
 msgid "Merged into %1"
 msgstr "Vereinigt mit %1"
 
-#: html/Search/Bulk.html:165 html/Ticket/Update.html:116
+#: html/Search/Bulk.html:143
+#: html/Ticket/Update.html:119
 msgid "Message"
 msgstr "Nachricht"
 
-#: lib/RT/Ticket_Overlay.pm:2406
+#: lib/RT/Ticket_Overlay.pm:2389
 msgid "Message could not be recorded"
 msgstr "Nachricht konnte nicht gespeichert werden"
 
-#: lib/RT/Ticket_Overlay.pm:2409
+#: lib/RT/Ticket_Overlay.pm:2392
 msgid "Message recorded"
 msgstr "Nachricht gespeichert"
 
-#: html/Ticket/Elements/PreviewScrips:115
+#: html/Ticket/Elements/PreviewScrips:117
 msgid "Messages about this ticket will not be sent to..."
-msgstr "Nachrichten über diese Anfrage werden nicht an diese Empfänger gesendet:"
+msgstr "Nachrichten über diese Anfrage werden nicht an diese Empfänger gesendet:"
+
+#: html/Elements/SelectTimeUnits:47
+msgid "Minutes"
+msgstr "Minuten"
 
-#: html/Search/Build.html:667
+#: html/Search/Build.html:645
 msgid "Mismatched parentheses"
 msgstr "Unausgeglichene Klammerung"
 
-#: lib/RT/Record.pm:940
+#: lib/RT/Record.pm:944
 msgid "Missing a primary key?: %1"
-msgstr "%1: Fehlt ein Primärschlüssel?"
+msgstr "%1: Fehlt ein Primärschlüssel?"
 
-#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93
+#: html/Admin/Users/Modify.html:193
+#: html/User/Prefs.html:93
 msgid "Mobile"
 msgstr "Handy"
 
 #: lib/RT/Queue_Overlay.pm:95
 msgid "Modify Access Control List"
-msgstr "Ändere Zugriffskontrollliste (ACL)"
+msgstr "Ändere Zugriffskontrollliste (ACL)"
 
-#: html/Admin/Elements/ObjectCustomFields:96
 #. (loc(lc($FriendlySubTypes)), loc(lc($Types)))
+#: html/Admin/Elements/ObjectCustomFields:96
 msgid "Modify Custom Fields which apply to %1 for all %2"
-msgstr "Alle benutzerdefinierten Felder %2, die zu %1 gehören, ändern"
+msgstr "Alle benutzerdefinierten Felder %2, die zu %1 gehören, ändern"
 
-#: html/Admin/Elements/ObjectCustomFields:98
 #. (loc(lc($Types)))
+#: html/Admin/Elements/ObjectCustomFields:98
 msgid "Modify Custom Fields which apply to all %1"
-msgstr "Alle benutzerdefinierten Felder, die zu %1 gehören, ändern"
+msgstr "Alle benutzerdefinierten Felder, die zu %1 gehören, ändern"
 
-#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107
+#: html/Admin/Global/GroupRights.html:106
+#: html/Admin/Groups/GroupRights.html:94
+#: html/Admin/Queues/GroupRights.html:107
 msgid "Modify Group Rights"
-msgstr "Gruppenrechte ändern"
+msgstr "Gruppenrechte ändern"
 
-#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101
+#: html/Admin/Groups/Members.html:102
+#: html/User/Groups/Members.html:101
 msgid "Modify Members"
-msgstr "Mitglieder ändern"
+msgstr "Mitglieder ändern"
 
 #: html/User/Delegation.html:58
 msgid "Modify Rights"
-msgstr "Rechte ändern"
+msgstr "Rechte ändern"
 
 #: lib/RT/Queue_Overlay.pm:98
 msgid "Modify Scrip templates for this queue"
-msgstr "Ändere Scrip-Vorlagen für diesen Bereich"
+msgstr "Ändere Scrip-Vorlagen für diesen Bereich"
 
 #: lib/RT/Queue_Overlay.pm:101
 msgid "Modify Scrips for this queue"
-msgstr "Ändere Scrips für diesen Bereich"
+msgstr "Ändere Scrips für diesen Bereich"
 
-#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75
+#: html/Admin/Global/UserRights.html:75
+#: html/Admin/Groups/UserRights.html:76
+#: html/Admin/Queues/UserRights.html:75
 msgid "Modify User Rights"
-msgstr "Ändern der Benutzerrechte"
+msgstr "Ändern der Benutzerrechte"
 
-#: html/Admin/Queues/CustomField.html:66
 #. ($QueueObj->Name())
+#: html/Admin/Queues/CustomField.html:66
 msgid "Modify a CustomField for queue %1"
-msgstr "Ändere ein benutzerdefiniertes Feld für den Bereich %1"
+msgstr "Ändere ein benutzerdefiniertes Feld für den Bereich %1"
 
-#: html/Admin/Queues/Scrip.html:75
 #. ($QueueObj->Name)
+#: html/Admin/Queues/Scrip.html:75
 msgid "Modify a scrip for queue %1"
-msgstr "Ändere ein Scrip für den Bereich %1"
+msgstr "Ändere ein Scrip für den Bereich %1"
 
 #: html/Admin/Global/Scrip.html:69
 msgid "Modify a scrip which applies to all queues"
-msgstr "Ändere ein globales benutzerdefiniertes Feld"
+msgstr "Ändere ein globales benutzerdefiniertes Feld"
 
-#: html/Admin/CustomFields/Objects.html:90
 #. ($CF->Name)
+#: html/Admin/CustomFields/Objects.html:90
 msgid "Modify associated objects for %1"
-msgstr "Ändern der assoziierte Objekte von %1"
+msgstr "Ändern der assoziierte Objekte von %1"
 
-#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50
 #. ($TicketObj->Id)
+#: html/Ticket/ModifyDates.html:46
+#: html/Ticket/ModifyDates.html:50
 msgid "Modify dates for #%1"
-msgstr "Ändere Datumsangaben für #%1"
+msgstr "Ändere Datumsangaben für #%1"
 
-#: html/Ticket/ModifyDates.html:56
 #. ($TicketObj->Id)
+#: html/Ticket/ModifyDates.html:56
 msgid "Modify dates for ticket # %1"
-msgstr "Ändere Datumsangaben für Anfrage #%1"
+msgstr "Ändere Datumsangaben für Anfrage #%1"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72
+#: html/Admin/Elements/GlobalCustomFieldTabs:65
+#: html/Admin/Global/index.html:72
 msgid "Modify global custom fields"
-msgstr "Ändern der globalen benutzerdefinierten Felder"
+msgstr "Ändern der globalen benutzerdefinierten Felder"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:70 html/Admin/Global/GroupRights.html:46 html/Admin/Global/GroupRights.html:49 html/Admin/Global/index.html:77
+#: html/Admin/Elements/GlobalCustomFieldTabs:70
+#: html/Admin/Global/GroupRights.html:46
+#: html/Admin/Global/GroupRights.html:49
+#: html/Admin/Global/index.html:77
 msgid "Modify global group rights"
-msgstr "Ändere globale Gruppenrechte"
+msgstr "Ändere globale Gruppenrechte"
 
 #: html/Admin/Global/GroupRights.html:54
 msgid "Modify global group rights."
-msgstr "Ändere globale Gruppenrechte."
+msgstr "Ändere globale Gruppenrechte."
 
-#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81
+#: html/Admin/Global/UserRights.html:46
+#: html/Admin/Global/UserRights.html:49
+#: html/Admin/Global/index.html:81
 msgid "Modify global user rights"
-msgstr "Ändere globale Benutzerrechte"
+msgstr "Ändere globale Benutzerrechte"
 
 #: html/Admin/Global/UserRights.html:54
 msgid "Modify global user rights."
-msgstr "Ändere globale Benutzerrechte."
+msgstr "Ändere globale Benutzerrechte."
 
 #: lib/RT/Group_Overlay.pm:171
 msgid "Modify group metadata or delete group"
-msgstr "Ändere Gruppen-Metadaten oder lösche die Gruppe"
+msgstr "Ändere Gruppen-Metadaten oder lösche die Gruppe"
 
-#: html/Admin/CustomFields/GroupRights.html:164
 #. ($CustomFieldObj->Name)
+#: html/Admin/CustomFields/GroupRights.html:164
 msgid "Modify group rights for custom field %1"
-msgstr "Ändere Gruppenrechte für das benutzerdefinierte Feld %1"
+msgstr "Ändere Gruppenrechte für das benutzerdefinierte Feld %1"
 
-#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56
 #. ($GroupObj->Name)
+#: html/Admin/Groups/GroupRights.html:46
+#: html/Admin/Groups/GroupRights.html:50
+#: html/Admin/Groups/GroupRights.html:56
 msgid "Modify group rights for group %1"
-msgstr "Ändere die Gruppenrechte der Gruppe %1"
+msgstr "Ändere die Gruppenrechte der Gruppe %1"
 
-#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50
 #. ($QueueObj->Name)
+#: html/Admin/Queues/GroupRights.html:46
+#: html/Admin/Queues/GroupRights.html:50
 msgid "Modify group rights for queue %1"
-msgstr "Ändere Gruppenrechte für den Bereich %1"
+msgstr "Ändere Gruppenrechte für den Bereich %1"
 
 #: lib/RT/Group_Overlay.pm:173
 msgid "Modify membership roster for this group"
-msgstr "Ändere Mitgliedsverzeichnis dieser Gruppe"
+msgstr "Ändere Mitgliedsverzeichnis dieser Gruppe"
 
 #: lib/RT/System.pm:83
 msgid "Modify one's own RT account"
-msgstr "Ändert den eigenen RT-Zugang"
+msgstr "Ändert den eigenen RT-Zugang"
 
-#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50
 #. ($QueueObj->Name)
+#: html/Admin/Queues/People.html:46
+#: html/Admin/Queues/People.html:50
 msgid "Modify people related to queue %1"
-msgstr "Ändere Personen im Zusammenhang mit diesem Bereich %1"
+msgstr "Ändere Personen im Zusammenhang mit diesem Bereich %1"
 
-#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56
 #. ($Ticket->id)
 #. ($Ticket->Id)
+#: html/Ticket/ModifyPeople.html:46
+#: html/Ticket/ModifyPeople.html:50
+#: html/Ticket/ModifyPeople.html:56
 msgid "Modify people related to ticket #%1"
-msgstr "Ändere Personen der Anfragen #%1"
+msgstr "Ändere Personen der Anfragen #%1"
 
-#: html/Admin/Queues/Scrips.html:67
 #. ($QueueObj->Name)
+#: html/Admin/Queues/Scrips.html:67
 msgid "Modify scrips for queue %1"
-msgstr "Ändere Scrips für den Bereich %1"
+msgstr "Ändere Scrips für den Bereich %1"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:56 html/Admin/Global/Scrips.html:65 html/Admin/Global/index.html:63
+#: html/Admin/Elements/GlobalCustomFieldTabs:56
+#: html/Admin/Global/Scrips.html:65
+#: html/Admin/Global/index.html:63
 msgid "Modify scrips which apply to all queues"
-msgstr "Ändere auf alle Bereiche angewandte Scrips"
+msgstr "Ändere auf alle Bereiche angewandte Scrips"
 
-#: html/Admin/Global/Template.html:102 html/Admin/Global/Template.html:46 html/Admin/Global/Template.html:51 html/Admin/Queues/Template.html:99
 #. (loc($TemplateObj->Name()))
 #. ($TemplateObj->id)
+#: html/Admin/Global/Template.html:102
+#: html/Admin/Global/Template.html:46
+#: html/Admin/Global/Template.html:51
+#: html/Admin/Queues/Template.html:99
 msgid "Modify template %1"
-msgstr "Ändere Vorlage %1"
+msgstr "Ändere Vorlage %1"
 
 #: html/Admin/Global/Templates.html:65
 msgid "Modify templates which apply to all queues"
-msgstr "Ändere globale Vorlagen"
+msgstr "Ändere globale Vorlagen"
 
-#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107
 #. ($Group->Name)
+#: html/Admin/Groups/Modify.html:119
+#: html/User/Groups/Modify.html:107
 msgid "Modify the group %1"
-msgstr "Ändere Gruppe %1"
+msgstr "Ändere Gruppe %1"
 
 #: lib/RT/Queue_Overlay.pm:96
 msgid "Modify the queue watchers"
-msgstr "Ändere die Bereichsbeobachter"
+msgstr "Ändere die Bereichsbeobachter"
 
-#: html/Admin/Users/Modify.html:301
 #. ($UserObj->Name)
+#: html/Admin/Users/Modify.html:301
 msgid "Modify the user %1"
-msgstr "Ändere Benutzer %1"
+msgstr "Ändere Benutzer %1"
 
-#: html/Ticket/ModifyAll.html:58
 #. ($Ticket->Id)
+#: html/Ticket/ModifyAll.html:58
 msgid "Modify ticket # %1"
-msgstr "Ändere Anfrage #%1"
+msgstr "Ändere Anfrage #%1"
 
-#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55
 #. ($TicketObj->Id)
+#: html/Ticket/Modify.html:46
+#: html/Ticket/Modify.html:49
+#: html/Ticket/Modify.html:55
 msgid "Modify ticket #%1"
-msgstr "Ändere Anfrage #%1"
+msgstr "Ändere Anfrage #%1"
 
 #: lib/RT/Queue_Overlay.pm:114
 msgid "Modify tickets"
-msgstr "Ändere Anfragen"
+msgstr "Ändere Anfragen"
 
-#: html/Admin/CustomFields/UserRights.html:157
 #. ($CustomFieldObj->Name)
+#: html/Admin/CustomFields/UserRights.html:157
 msgid "Modify user rights for custom field %1"
-msgstr "Ändere Benutzerrechte für benutzerdefinierte Felder von %1"
+msgstr "Ändere Benutzerrechte für benutzerdefinierte Felder von %1"
 
-#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56
 #. ($GroupObj->Name)
+#: html/Admin/Groups/UserRights.html:46
+#: html/Admin/Groups/UserRights.html:50
+#: html/Admin/Groups/UserRights.html:56
 msgid "Modify user rights for group %1"
-msgstr "Ändere Benutzerrechte für die Gruppe %1"
+msgstr "Ändere Benutzerrechte für die Gruppe %1"
 
-#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50
 #. ($QueueObj->Name)
+#: html/Admin/Queues/UserRights.html:46
+#: html/Admin/Queues/UserRights.html:50
 msgid "Modify user rights for queue %1"
-msgstr "Ändere Benutzerrechte für den Bereich %1"
+msgstr "Ändere Benutzerrechte für den Bereich %1"
 
 #: lib/RT/Queue_Overlay.pm:95
 msgid "ModifyACL"
 msgstr "ACLBearbeiten"
 
-#: lib/RT/CustomField_Overlay.pm:103
+#: lib/RT/CustomField_Overlay.pm:108
 msgid "ModifyCustomField"
 msgstr "BenutzerdefiniertesFeldBearbeiten"
 
@@ -2491,10 +2901,10 @@ msgstr "AnfrageBearbeiten"
 msgid "Mon."
 msgstr "Mo."
 
-#: html/Ticket/Elements/ShowRequestor:62
 #. ($name)
+#: html/Ticket/Elements/ShowRequestor:61
 msgid "More about %1"
-msgstr "Mehr über %1"
+msgstr "Mehr über %1"
 
 #: html/Admin/Elements/PickCustomFields:83
 msgid "Move down"
@@ -2510,22 +2920,32 @@ msgstr "Mehrere"
 
 #: lib/RT/User_Overlay.pm:227
 msgid "Must specify 'Name' attribute"
-msgstr "Sie müssen eine Angabe bei 'Name' machen"
+msgstr "Sie müssen eine Angabe bei 'Name' machen"
 
-#: html/SelfService/Elements/MyRequests:70
 #. ($friendly_status)
+#: html/SelfService/Elements/MyRequests:69
 msgid "My %1 tickets"
 msgstr "Meine %1 Anfragen"
 
-#: html/Approvals/index.html:46 html/Approvals/index.html:47
+#: html/Approvals/index.html:46
+#: html/Approvals/index.html:47
 msgid "My approvals"
 msgstr "Meine Freigaben"
 
-#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53
+#: html/Search/Elements/SearchPrivacy:50
+#: html/Search/Elements/SelectSearchObject:53
+#: html/Search/Elements/SelectSearchesForObjects:53
 msgid "My saved searches"
 msgstr "Meine gespeicherten Suchanfragen"
 
-#: 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/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:158
+#: html/User/Groups/Modify.html:65
 msgid "Name"
 msgstr "Name"
 
@@ -2537,15 +2957,16 @@ msgstr "Benutzername ist bereits in Gebrauch"
 msgid "Never"
 msgstr "Niemals"
 
-#: html/Elements/Quicksearch:51
+#: NOT FOUND IN SOURCE
 msgid "New"
 msgstr "Neu"
 
-#: html/Elements/EditLinks:115
+#: html/Elements/EditLinks:117
 msgid "New Links"
 msgstr "Neue Beziehungen"
 
-#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109
+#: html/Admin/Users/Modify.html:119
+#: html/User/Prefs.html:109
 msgid "New Password"
 msgstr "Neues Passwort"
 
@@ -2553,15 +2974,21 @@ msgstr "Neues Passwort"
 msgid "New Pending Approval"
 msgstr "Neue wartende Freigaben"
 
-#: html/Ticket/Elements/Tabs:193
+#: NOT FOUND IN SOURCE
 msgid "New Query"
 msgstr "Neue Suche"
 
-#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73
+#: html/Ticket/Elements/Tabs:205
+msgid "New Search"
+msgstr "Neue Suche"
+
+#: html/Admin/Elements/CustomFieldTabs:93
+#: html/Admin/Queues/CustomField.html:73
 msgid "New custom field"
 msgstr "Neues benutzerdefiniertes Feld"
 
-#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73
+#: html/Admin/Elements/GroupTabs:77
+#: html/User/Elements/GroupTabs:73
 msgid "New group"
 msgstr "Neue Gruppe"
 
@@ -2577,15 +3004,25 @@ msgstr "Neue Passworterinnerung wurde verschickt"
 msgid "New queue"
 msgstr "Neuer Bereich"
 
+#: html/Ticket/Elements/Reminders:71
+msgid "New reminder:"
+msgstr "Neue Wiedervorlage"
+
 #: html/Admin/Elements/SelectRights:65
 msgid "New rights"
 msgstr "Neue Rechte"
 
-#: html/Admin/Global/Scrip.html:61 html/Admin/Global/Scrips.html:60 html/Admin/Queues/Scrip.html:64 html/Admin/Queues/Scrips.html:76
+#: html/Admin/Global/Scrip.html:61
+#: html/Admin/Global/Scrips.html:60
+#: html/Admin/Queues/Scrip.html:64
+#: html/Admin/Queues/Scrips.html:76
 msgid "New scrip"
 msgstr "Neues Scrip"
 
-#: html/Admin/Global/Template.html:81 html/Admin/Global/Templates.html:60 html/Admin/Queues/Template.html:79 html/Admin/Queues/Templates.html:71
+#: html/Admin/Global/Template.html:81
+#: html/Admin/Global/Templates.html:60
+#: html/Admin/Queues/Template.html:79
+#: html/Admin/Queues/Templates.html:71
 msgid "New template"
 msgstr "Neue Vorlage"
 
@@ -2593,7 +3030,7 @@ msgstr "Neue Vorlage"
 msgid "New ticket"
 msgstr "Neue Anfrage"
 
-#: lib/RT/Ticket_Overlay.pm:2713
+#: lib/RT/Ticket_Overlay.pm:2696
 msgid "New ticket doesn't exist"
 msgstr "Neue Anfrage existiert nicht"
 
@@ -2605,19 +3042,22 @@ msgstr "Neuer Benutzer"
 msgid "New user called"
 msgstr "Neuer Benutzer aufgerufen"
 
-#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50
+#: html/Admin/Queues/People.html:76
+#: html/Ticket/Elements/EditPeople:50
 msgid "New watchers"
 msgstr "Neue Beobachter"
 
+#: html/Helpers/CalPopup.html:13
 #: html/Ticket/Elements/Tabs:92
 msgid "Next"
-msgstr "Nächste"
+msgstr "Nächste"
 
 #: html/Elements/TicketList:104
 msgid "Next Page"
-msgstr "Nächste Seite"
+msgstr "Nächste Seite"
 
-#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72
+#: html/Admin/Users/Modify.html:84
+#: html/User/Prefs.html:72
 msgid "Nickname"
 msgstr "Spitzname"
 
@@ -2625,7 +3065,8 @@ msgstr "Spitzname"
 msgid "No Class defined"
 msgstr "Keine Klasse definiert"
 
-#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119
+#: html/Admin/CustomFields/Modify.html:140
+#: html/Admin/Elements/EditCustomField:119
 msgid "No CustomField"
 msgstr "Kein benutzerdefiniertes Feld"
 
@@ -2633,44 +3074,49 @@ msgstr "Kein benutzerdefiniertes Feld"
 msgid "No CustomField defined"
 msgstr "Kein benutzerdefiniertes Feld definiert"
 
-#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92
+#: html/Admin/Groups/GroupRights.html:105
+#: html/Admin/Groups/UserRights.html:92
 msgid "No Group defined"
 msgstr "Keine Gruppe definiert"
 
-#: lib/RT/Tickets_Overlay_SQL.pm:477
+#: lib/RT/Tickets_Overlay_SQL.pm:480
 msgid "No Query"
 msgstr "Keine Suche"
 
-#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89
+#: html/Admin/Queues/GroupRights.html:118
+#: html/Admin/Queues/UserRights.html:89
 msgid "No Queue defined"
 msgstr "Kein Bereich vorhanden"
 
 #: bin/rt-crontool:73
 msgid "No RT user found. Please consult your RT administrator.\\n"
-msgstr ""
-"Kein RT-Benutzer gefunden. Bitte kontaktiere Sie Ihren "
-"RT-Administrator.\\n"
+msgstr "Kein RT-Benutzer gefunden. Bitte kontaktiere Sie Ihren RT-Administrator.\\n"
 
-#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97
+#: html/Admin/Global/Template.html:100
+#: html/Admin/Queues/Template.html:97
 msgid "No Template"
 msgstr "Keine Vorlage"
 
-#: html/Approvals/Elements/Approve:67
+#: html/Approvals/Elements/Approve:73
 msgid "No action"
 msgstr "Keine Aktion"
 
-#: lib/RT/Record.pm:935
+#: lib/RT/Record.pm:939
 msgid "No column specified"
 msgstr "Keine Spalte angegeben"
 
-#: html/Ticket/Elements/ShowRequestor:68
+#: html/Ticket/Elements/ShowRequestor:67
 msgid "No comment entered about this user"
 msgstr "Kein Kommentar zu diesem Benutzer angegeben"
 
-#: lib/RT/Action/Generic.pm:186 lib/RT/Condition/Generic.pm:198 lib/RT/Search/ActiveTicketsInQueue.pm:78 lib/RT/Search/Generic.pm:135
 #. (ref $self)
+#: lib/RT/Action/Generic.pm:179
+#: lib/RT/Condition/Generic.pm:198
+#: lib/RT/Search/ActiveTicketsInQueue.pm:78
+#: lib/RT/Search/Generic.pm:135
+#: lib/RT/Search/Googleish.pm:78
 msgid "No description for %1"
-msgstr "Keine Beschreibung für %1 vorhanden"
+msgstr "Keine Beschreibung für %1 vorhanden"
 
 #: lib/RT/Users_Overlay.pm:185
 msgid "No group specified"
@@ -2680,9 +3126,9 @@ msgstr "Keine Gruppe angegeben"
 msgid "No groups matching search criteria found."
 msgstr "Keine Gruppe mit diesen Kriterien gefunden"
 
-#: lib/RT/Ticket_Overlay.pm:2349
+#: lib/RT/Ticket_Overlay.pm:2350
 msgid "No message attached"
-msgstr "Keine Nachricht angefügt"
+msgstr "Keine Nachricht angefügt"
 
 #: lib/RT/User_Overlay.pm:1035
 msgid "No password set"
@@ -2692,8 +3138,8 @@ msgstr "Kein Passwort gesetzt"
 msgid "No permission to create queues"
 msgstr "Keine Erlaubnis Bereiche anzulegen"
 
-#: lib/RT/Ticket_Overlay.pm:409
 #. ($QueueObj->Name)
+#: lib/RT/Ticket_Overlay.pm:410
 msgid "No permission to create tickets in the queue '%1'"
 msgstr "Kein Erlaubnis um Anfragen im Bereich '%1' anzulegen"
 
@@ -2709,13 +3155,15 @@ msgstr "Kein Recht dieses Anfrage anzuzeigen"
 msgid "No permission to view update ticket"
 msgstr "Kein Recht dieses Anfrage zu aktualisieren"
 
-#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450
+#: lib/RT/Queue_Overlay.pm:792
+#: lib/RT/Ticket_Overlay.pm:1451
 msgid "No principal specified"
 msgstr "Keine Rolle angegeben"
 
-#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185
+#: html/Admin/Queues/People.html:175
+#: html/Admin/Queues/People.html:185
 msgid "No principals selected."
-msgstr "Keine Rolle ausgewählt."
+msgstr "Keine Rolle ausgewählt."
 
 #: html/Admin/Queues/index.html:57
 msgid "No queues matching search criteria found."
@@ -2727,13 +3175,13 @@ msgstr "Keine Rechte gefunden"
 
 #: html/Admin/Elements/SelectRights:53
 msgid "No rights granted."
-msgstr "Keine Rechte gewährt."
+msgstr "Keine Rechte gewährt."
 
 #: lib/RT/SavedSearch.pm:187
 msgid "No search loaded"
-msgstr ""
+msgstr "Keine Suche geladen"
 
-#: html/Search/Bulk.html:194
+#: html/Search/Bulk.html:220
 msgid "No search to operate on."
 msgstr "Keine Suche zu bearbeiten."
 
@@ -2741,7 +3189,8 @@ msgstr "Keine Suche zu bearbeiten."
 msgid "No subject"
 msgstr "Kein Betreff"
 
-#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554
+#: lib/RT/Transaction_Overlay.pm:517
+#: lib/RT/Transaction_Overlay.pm:554
 msgid "No transaction type specified"
 msgstr "Kein Transaktionstyp angegeben"
 
@@ -2749,19 +3198,19 @@ msgstr "Kein Transaktionstyp angegeben"
 msgid "No users matching search criteria found."
 msgstr "Keine auf die Suchkriterien passende Benutzer gefunden"
 
-#: lib/RT/Record.pm:932
+#: lib/RT/Record.pm:936
 msgid "No value sent to _Set!\\n"
 msgstr "Kein Wert an _Set geschickt!\\n"
 
-#: html/Elements/QuickCreate:61
+#: html/Elements/QuickCreate:59
 msgid "Nobody"
 msgstr "Niemand"
 
-#: lib/RT/Record.pm:937
+#: lib/RT/Record.pm:941
 msgid "Nonexistant field?"
 msgstr "Nichtexistierendes Feld?"
 
-#: html/Elements/Header:96
+#: html/Elements/Header:84
 msgid "Not logged in."
 msgstr "Nicht angemeldet."
 
@@ -2773,7 +3222,7 @@ msgstr "Nicht angegeben"
 msgid "Not yet implemented."
 msgstr "Noch nicht implementiert."
 
-#: html/Approvals/Elements/Approve:70
+#: html/Approvals/Elements/Approve:77
 msgid "Notes"
 msgstr "Bemerkungen"
 
@@ -2789,21 +3238,23 @@ msgstr "Benachrichtige AdminCCs"
 msgid "Notify AdminCcs as Comment"
 msgstr "Benachrichtige AdminCCs als Kommentar"
 
-#: etc/initialdata:93 etc/upgrade/3.1.17/content:6
+#: etc/initialdata:93
+#: etc/upgrade/3.1.17/content:6
 msgid "Notify Ccs"
 msgstr "Benachrichtige CCs"
 
-#: etc/initialdata:89 etc/upgrade/3.1.17/content:2
+#: etc/initialdata:89
+#: etc/upgrade/3.1.17/content:2
 msgid "Notify Ccs as Comment"
 msgstr "Benachrichtige CCs als Kommentar"
 
 #: etc/initialdata:128
 msgid "Notify Other Recipients"
-msgstr "Benachrichtige andere Empfänger"
+msgstr "Benachrichtige andere Empfänger"
 
 #: etc/initialdata:124
 msgid "Notify Other Recipients as Comment"
-msgstr "Benachrichtige andere Empfänger als Kommentar"
+msgstr "Benachrichtige andere Empfänger als Kommentar"
 
 #: etc/initialdata:85
 msgid "Notify Owner"
@@ -2815,19 +3266,15 @@ msgstr "Benachrichtige Besitzer als Kommentar"
 
 #: etc/initialdata:376
 msgid "Notify Owner of their rejected ticket"
-msgstr "Besitzer über ihre abgewiesene Anfrage informieren"
+msgstr "Besitzer über ihre abgewiesene Anfrage informieren"
 
 #: etc/initialdata:365
 msgid "Notify Owner of their ticket has been approved by all approvers"
-msgstr ""
-"Benachrichtige Besitzer, dass sein Anfrage von allen Entscheidungsträgern "
-"freigegeben wurde"
+msgstr "Benachrichtige Besitzer, dass sein Anfrage von allen Entscheidungsträgern freigegeben wurde"
 
 #: etc/initialdata:353
 msgid "Notify Owner of their ticket has been approved by some approver"
-msgstr ""
-"Benachrichtige Besitzer, dass sein Anfrage von einigen Entscheidungsträgern "
-"freigegeben wurde"
+msgstr "Benachrichtige Besitzer, dass sein Anfrage von einigen Entscheidungsträgern freigegeben wurde"
 
 #: etc/initialdata:334
 msgid "Notify Owners and AdminCcs of new items pending their approval"
@@ -2861,29 +3308,30 @@ msgstr "Nov."
 msgid "OR"
 msgstr "Oder"
 
-#: lib/RT/Record.pm:319
+#: lib/RT/Record.pm:323
 msgid "Object could not be created"
 msgstr "Objekt konnte nicht erstellt werden"
 
 #: lib/RT/Record.pm:124
 msgid "Object could not be deleted"
-msgstr "Objekt konnte nicht gelöscht werden"
+msgstr "Objekt konnte nicht gelöscht werden"
 
-#: lib/RT/Record.pm:338
+#: lib/RT/Record.pm:342
 msgid "Object created"
 msgstr "Objekt erstellt"
 
 #: lib/RT/Record.pm:121
 msgid "Object deleted"
-msgstr "Objekt gelöscht"
+msgstr "Objekt gelöscht"
 
-#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63
 #. ($ObjectType)
 #. ($LookupType)
+#: html/Admin/CustomFields/Objects.html:72
+#: html/Admin/Elements/ObjectCustomFields:63
 msgid "Object of type %1 cannot take custom fields"
 msgstr "Objekt vom Typ %1 kann keine benutzerdefinierten Felder haben"
 
-#: lib/RT/CustomField_Overlay.pm:901
+#: lib/RT/CustomField_Overlay.pm:955
 msgid "Object type mismatch"
 msgstr "Objekt Typ passt nicht"
 
@@ -2891,7 +3339,7 @@ msgstr "Objekt Typ passt nicht"
 msgid "Oct."
 msgstr "Okt."
 
-#: html/Tools/Elements/Tabs:53
+#: html/Tools/Elements/Tabs:55
 msgid "Offline"
 msgstr "Offline"
 
@@ -2923,13 +3371,14 @@ msgstr "Bei Erstellen"
 msgid "On Owner Change"
 msgstr "Bei Besitzerwechsel"
 
-#: etc/initialdata:177 etc/upgrade/3.1.17/content:15
+#: etc/initialdata:177
+#: etc/upgrade/3.1.17/content:15
 msgid "On Priority Change"
-msgstr "Bei Änderung der Priorität"
+msgstr "Bei Änderung der Priorität"
 
 #: etc/initialdata:192
 msgid "On Queue Change"
-msgstr "Bei Änderung des Bereichs"
+msgstr "Bei Änderung des Bereichs"
 
 #: etc/initialdata:198
 msgid "On Resolve"
@@ -2937,29 +3386,33 @@ msgstr "Beim Erledigen"
 
 #: etc/initialdata:169
 msgid "On Status Change"
-msgstr "Beim Ändern des Status"
+msgstr "Beim Ändern des Status"
 
 #: etc/initialdata:150
 msgid "On Transaction"
 msgstr "Bei einer Transaktion"
 
-#: html/Approvals/Elements/PendingMyApproval:71
-#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>")
+#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter' id='CreatedAfter'>")
+#: html/Approvals/Elements/PendingMyApproval:70
 msgid "Only show approvals for requests created after %1"
-msgstr "Zeige nur Freigaben für nach dem %1 erstelle Anfragen"
+msgstr "Zeige nur Freigaben für nach dem %1 erstelle Anfragen"
 
-#: html/Approvals/Elements/PendingMyApproval:69
-#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>")
+#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore' id='CreatedBefore'>")
+#: html/Approvals/Elements/PendingMyApproval:68
 msgid "Only show approvals for requests created before %1"
-msgstr "Zeige nur Freigaben für vor dem %1 erstellte Anfragen"
+msgstr "Zeige nur Freigaben für vor dem %1 erstellte Anfragen"
+
+#: html/Admin/CustomFields/index.html:75
+msgid "Only show custom fields for:"
+msgstr "Nur Benutzerdefinierte Felder anzeigen für:"
 
-#: html/Elements/Quicksearch:52
+#: NOT FOUND IN SOURCE
 msgid "Open"
 msgstr "Offen"
 
-#: html/Ticket/Elements/Tabs:159
+#: html/Ticket/Elements/Tabs:161
 msgid "Open it"
-msgstr "Öffnen"
+msgstr "Öffnen"
 
 #: html/SelfService/Elements/Tabs:63
 msgid "Open tickets"
@@ -2967,20 +3420,25 @@ msgstr "Offene Anfragen"
 
 #: etc/initialdata:140
 msgid "Open tickets on correspondence"
-msgstr "Öffne Anfragen bei Korrespondenz"
+msgstr "Öffne Anfragen bei Korrespondenz"
+
+#: html/Prefs/MyRT.html:62
+msgid "Options"
+msgstr "Optionen"
 
 #: html/Search/Elements/DisplayOptions:56
 msgid "Order by"
 msgstr "Sortiert nach"
 
-#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129
+#: html/Admin/Users/Modify.html:141
+#: html/User/Prefs.html:129
 msgid "Organization"
 msgstr "Organisation"
 
-#: html/Approvals/Elements/Approve:54
 #. ($approving->Id, $approving->Subject)
+#: html/Approvals/Elements/Approve:53
 msgid "Originating ticket: #%1"
-msgstr "Ursprüngliche Anfrage: #%1"
+msgstr "Ursprüngliche Anfrage: #%1"
 
 #: lib/RT/Transaction_Overlay.pm:611
 msgid "Outgoing email about a comment recorded"
@@ -2992,7 +3450,7 @@ msgstr "Ausgehende Mail gespeichert"
 
 #: html/Admin/Queues/Modify.html:90
 msgid "Over time, priority moves toward"
-msgstr "Mit der Zeit steigt die Priorität auf"
+msgstr "Mit der Zeit steigt die Priorität auf"
 
 #: lib/RT/Queue_Overlay.pm:113
 msgid "Own tickets"
@@ -3002,33 +3460,51 @@ msgstr "Eigene Anfragen"
 msgid "OwnTicket"
 msgstr "EigeneAnfrage"
 
-#: etc/initialdata:38 html/Elements/QuickCreate:58 html/Search/Elements/PickBasics:101 html/SelfService/Elements/MyRequests:51 html/Ticket/Create.html:69 html/Ticket/Elements/EditPeople:64 html/Ticket/Elements/EditPeople:65 html/Ticket/Elements/ShowPeople:48 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:111 lib/RT/Tickets_Overlay.pm:1734
+#: 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:1781
 msgid "Owner"
 msgstr "Besitzer"
 
-#: lib/RT/Ticket_Overlay.pm:495
+#: lib/RT/Ticket_Overlay.pm:496
 msgid "Owner could not be set."
 msgstr "Besitzer konnte nicht gesetzt werden"
 
-#: lib/RT/Transaction_Overlay.pm:661
 #. ($Old->Name , $New->Name)
+#: lib/RT/Transaction_Overlay.pm:661
 msgid "Owner forcibly changed from %1 to %2"
-msgstr "Besitzer mit Gewalt von %1 in %2 geändert"
+msgstr "Besitzer mit Gewalt von %1 in %2 geändert"
 
-#: html/Elements/TicketList:78
 #. ($Page, int($TotalFound/$Rows)+$oddRows)
+#: html/Elements/TicketList:78
 msgid "Page %1 of %2"
 msgstr "Seite %1 von %2"
 
-#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97
+#: html/Admin/Users/Modify.html:198
+#: html/User/Prefs.html:97
 msgid "Pager"
 msgstr "Pager"
 
-#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60
+#: html/Elements/EditLinks:144
+#: html/Elements/EditLinks:76
+#: html/Elements/ShowLinks:68
+#: html/Ticket/Create.html:220
+#: html/Ticket/Elements/BulkLinks:60
 msgid "Parents"
 msgstr "Eltern"
 
-#: html/Elements/Login:74 html/User/Prefs.html:105
+#: html/Elements/Login:84
+#: html/User/Prefs.html:105
 msgid "Password"
 msgstr "Passwort"
 
@@ -3036,80 +3512,179 @@ msgstr "Passwort"
 msgid "Password Reminder"
 msgstr "Passworterinnerung"
 
-#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046
+#: lib/RT/Transaction_Overlay.pm:769
+#: lib/RT/User_Overlay.pm:1044
 msgid "Password changed"
-msgstr "Passwort geändert"
+msgstr "Passwort geändert"
 
-#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215
 #. ($RT::MinimumPasswordLength)
+#: lib/RT/User_Overlay.pm:1038
+#: lib/RT/User_Overlay.pm:215
 msgid "Password needs to be at least %1 characters long"
-msgstr ""
+msgstr "Das Passwort muss mindestens %1 Zeichen lang sein"
 
 #: lib/RT/User_Overlay.pm:1045
 msgid "Password set"
-msgstr ""
+msgstr "Passwort erstellt"
 
 #: NOT FOUND IN SOURCE
 msgid "Password too short"
 msgstr "Passwort ist zu kurz"
 
-#: html/User/Prefs.html:232
 #. (loc_fuzzy($msg))
+#: html/User/Prefs.html:232
 msgid "Password: %1"
 msgstr "Passwort: %1"
 
 #: lib/RT/User_Overlay.pm:1031
 msgid "Password: Permission Denied"
-msgstr ""
+msgstr "Passwort: Zugriff verweigert"
 
 #: html/Admin/Users/Modify.html:356
 msgid "Passwords do not match."
-msgstr "Passwörter verschieden"
+msgstr "Passwörter verschieden"
 
 #: html/User/Prefs.html:234
 msgid "Passwords do not match. Your password has not been changed"
-msgstr "Passwörter verschieden, keine Änderung"
+msgstr "Passwörter verschieden, keine Änderung"
 
-#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72
+#: html/Ticket/Elements/ShowSummary:62
+#: html/Ticket/Elements/Tabs:119
+#: html/Ticket/ModifyAll.html:72
 msgid "People"
 msgstr "Personen"
 
 #: etc/initialdata:133
 msgid "Perform a user-defined action"
-msgstr "Führe eine benutzerdefinierte Aktion aus"
+msgstr "Führe eine benutzerdefinierte Aktion aus"
 
 #: html/Admin/Tools/Configuration.html:94
 msgid "Perl configuration"
 msgstr "Perl Konfiguration"
 
-#: 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:402 lib/RT/Attribute_Overlay.pm:411 lib/RT/Attribute_Overlay.pm:424 lib/RT/CurrentUser.pm:117 lib/RT/CurrentUser.pm:126 lib/RT/CustomField_Overlay.pm:1022 lib/RT/CustomField_Overlay.pm:167 lib/RT/CustomField_Overlay.pm:184 lib/RT/CustomField_Overlay.pm:195 lib/RT/CustomField_Overlay.pm:366 lib/RT/CustomField_Overlay.pm:398 lib/RT/CustomField_Overlay.pm:697 lib/RT/CustomField_Overlay.pm:870 lib/RT/CustomField_Overlay.pm:905 lib/RT/CustomField_Overlay.pm:950 lib/RT/Group_Overlay.pm:1125 lib/RT/Group_Overlay.pm:1129 lib/RT/Group_Overlay.pm:1138 lib/RT/Group_Overlay.pm:1248 lib/RT/Group_Overlay.pm:1252 lib/RT/Group_Overlay.pm:1258 lib/RT/Group_Overlay.pm:453 lib/RT/Group_Overlay.pm:550 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:636 lib/RT/Group_Overlay.pm:734 lib/RT/Group_Overlay.pm:738 lib/RT/Group_Overlay.pm:744 lib/RT/Group_Overlay.pm:930 lib/RT/Group_Overlay.pm:934 lib/RT/Group_Overlay.pm:947 lib/RT/Queue_Overlay.pm:1051 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:654 lib/RT/Queue_Overlay.pm:664 lib/RT/Queue_Overlay.pm:678 lib/RT/Queue_Overlay.pm:816 lib/RT/Queue_Overlay.pm:825 lib/RT/Queue_Overlay.pm:838 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:1318 lib/RT/Ticket_Overlay.pm:1328 lib/RT/Ticket_Overlay.pm:1342 lib/RT/Ticket_Overlay.pm:1483 lib/RT/Ticket_Overlay.pm:1493 lib/RT/Ticket_Overlay.pm:1507 lib/RT/Ticket_Overlay.pm:1624 lib/RT/Ticket_Overlay.pm:1944 lib/RT/Ticket_Overlay.pm:2082 lib/RT/Ticket_Overlay.pm:2252 lib/RT/Ticket_Overlay.pm:2302 lib/RT/Ticket_Overlay.pm:2474 lib/RT/Ticket_Overlay.pm:2577 lib/RT/Ticket_Overlay.pm:2625 lib/RT/Ticket_Overlay.pm:2704 lib/RT/Ticket_Overlay.pm:2718 lib/RT/Ticket_Overlay.pm:2942 lib/RT/Ticket_Overlay.pm:2952 lib/RT/Ticket_Overlay.pm:2957 lib/RT/Ticket_Overlay.pm:3180 lib/RT/Ticket_Overlay.pm:3184 lib/RT/Ticket_Overlay.pm:3327 lib/RT/Ticket_Overlay.pm:3448 lib/RT/Transaction_Overlay.pm:505 lib/RT/Transaction_Overlay.pm:512 lib/RT/Transaction_Overlay.pm:540 lib/RT/Transaction_Overlay.pm:547 lib/RT/User_Overlay.pm:1184 lib/RT/User_Overlay.pm:1725 lib/RT/User_Overlay.pm:370 lib/RT/User_Overlay.pm:736 lib/RT/User_Overlay.pm:775
+#: lib/RT/ACE_Overlay.pm:262
+#: lib/RT/ACE_Overlay.pm:268
+#: lib/RT/ACE_Overlay.pm:594
+#: lib/RT/ACE_Overlay.pm:604
+#: lib/RT/ACE_Overlay.pm:614
+#: lib/RT/ACE_Overlay.pm:679
+#: 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:1004
+#: lib/RT/CustomField_Overlay.pm:1125
+#: lib/RT/CustomField_Overlay.pm:167
+#: lib/RT/CustomField_Overlay.pm:184
+#: lib/RT/CustomField_Overlay.pm:195
+#: lib/RT/CustomField_Overlay.pm:369
+#: lib/RT/CustomField_Overlay.pm:397
+#: lib/RT/CustomField_Overlay.pm:751
+#: lib/RT/CustomField_Overlay.pm:924
+#: lib/RT/CustomField_Overlay.pm:959
+#: lib/RT/Group_Overlay.pm:1125
+#: lib/RT/Group_Overlay.pm:1129
+#: lib/RT/Group_Overlay.pm:1138
+#: lib/RT/Group_Overlay.pm:1248
+#: lib/RT/Group_Overlay.pm:1252
+#: lib/RT/Group_Overlay.pm:1258
+#: lib/RT/Group_Overlay.pm:453
+#: lib/RT/Group_Overlay.pm:550
+#: lib/RT/Group_Overlay.pm:628
+#: lib/RT/Group_Overlay.pm:636
+#: lib/RT/Group_Overlay.pm:734
+#: lib/RT/Group_Overlay.pm:738
+#: lib/RT/Group_Overlay.pm:744
+#: lib/RT/Group_Overlay.pm:930
+#: lib/RT/Group_Overlay.pm:934
+#: lib/RT/Group_Overlay.pm:947
+#: lib/RT/Queue_Overlay.pm:1051
+#: lib/RT/Queue_Overlay.pm:141
+#: lib/RT/Queue_Overlay.pm:159
+#: lib/RT/Queue_Overlay.pm:654
+#: lib/RT/Queue_Overlay.pm:664
+#: lib/RT/Queue_Overlay.pm:678
+#: lib/RT/Queue_Overlay.pm:816
+#: lib/RT/Queue_Overlay.pm:825
+#: lib/RT/Queue_Overlay.pm:838
+#: 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:2457
+#: lib/RT/Ticket_Overlay.pm:2560
+#: lib/RT/Ticket_Overlay.pm:2608
+#: lib/RT/Ticket_Overlay.pm:2687
+#: lib/RT/Ticket_Overlay.pm:2701
+#: lib/RT/Ticket_Overlay.pm:2925
+#: lib/RT/Ticket_Overlay.pm:2935
+#: lib/RT/Ticket_Overlay.pm:2940
+#: lib/RT/Ticket_Overlay.pm:3163
+#: lib/RT/Ticket_Overlay.pm:3167
+#: lib/RT/Ticket_Overlay.pm:3310
+#: lib/RT/Ticket_Overlay.pm:3431
+#: lib/RT/Transaction_Overlay.pm:504
+#: lib/RT/Transaction_Overlay.pm:511
+#: lib/RT/Transaction_Overlay.pm:539
+#: lib/RT/Transaction_Overlay.pm:546
+#: lib/RT/User_Overlay.pm:1031
+#: lib/RT/User_Overlay.pm:1182
+#: lib/RT/User_Overlay.pm:1886
+#: lib/RT/User_Overlay.pm:370
+#: lib/RT/User_Overlay.pm:736
+#: lib/RT/User_Overlay.pm:775
 msgid "Permission Denied"
 msgstr "Zugriff verweigert"
 
 #: html/User/Elements/Tabs:56
 msgid "Personal Groups"
-msgstr "Persönliche Gruppen"
+msgstr "Persönliche Gruppen"
 
-#: html/User/Groups/index.html:51 html/User/Groups/index.html:61
+#: html/User/Groups/index.html:51
+#: html/User/Groups/index.html:61
 msgid "Personal groups"
-msgstr "Persönliche Gruppen"
+msgstr "Persönliche Gruppen"
 
 #: html/User/Elements/DelegateRights:58
 msgid "Personal groups:"
-msgstr "Persönliche Gruppen:"
+msgstr "Persönliche Gruppen:"
 
-#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82
+#: html/Admin/Users/Modify.html:180
+#: html/User/Prefs.html:82
 msgid "Phone numbers"
 msgstr "Telefonnummern"
 
-#: html/Elements/Header:87 html/Elements/Tabs:88 html/SelfService/Elements/Tabs:75 html/SelfService/Prefs.html:46 html/User/Prefs.html:46 html/User/Prefs.html:49
+#: 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
 msgid "Preferences"
 msgstr "Voreinstellungen"
 
 #: lib/RT/Action/Generic.pm:196
 msgid "Prepare Stubbed"
-msgstr "Prepare Stumpf ausgeführt"
+msgstr "Prepare Stumpf ausgeführt"
 
+#: html/Helpers/CalPopup.html:11
 #: html/Ticket/Elements/Tabs:84
 msgid "Prev"
 msgstr "Vorherige"
@@ -3118,29 +3693,36 @@ msgstr "Vorherige"
 msgid "Previous Page"
 msgstr "Vorherige Seite"
 
-#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570
 #. ($args{'PrincipalId'})
+#: lib/RT/ACE_Overlay.pm:158
+#: lib/RT/ACE_Overlay.pm:240
+#: lib/RT/ACE_Overlay.pm:570
 msgid "Principal %1 not found."
 msgstr "Rolle %1 nicht gefunden."
 
-#: html/Search/Elements/PickBasics:160 html/Ticket/Create.html:184 html/Ticket/Elements/EditBasics:74 html/Ticket/Elements/ShowBasics:72 lib/RT/Tickets_Overlay.pm:1518
+#: 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:1565
 msgid "Priority"
-msgstr "Priorität"
+msgstr "Priorität"
 
 #: html/Admin/Queues/Modify.html:86
 msgid "Priority starts at"
-msgstr "Priorität beginnt bei"
+msgstr "Priorität beginnt bei"
 
 #: html/Search/Elements/EditSearches:50
 msgid "Privacy:"
-msgstr "Privatsphäre:"
+msgstr "Privatsphäre:"
 
 #: etc/initialdata:25
 msgid "Privileged"
 msgstr "Privilegiert"
 
-#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223
 #. (loc_fuzzy($msg))
+#: html/Admin/Users/Modify.html:334
+#: html/User/Prefs.html:223
 msgid "Privileged status: %1"
 msgstr "Privilegierungsstatus: %1"
 
@@ -3148,25 +3730,42 @@ msgstr "Privilegierungsstatus: %1"
 msgid "Privileged users"
 msgstr "Privilegierte Benutzer"
 
-#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59
+#: etc/initialdata:23
+#: etc/initialdata:29
+#: etc/initialdata:35
+#: etc/initialdata:59
 msgid "Pseudogroup for internal use"
-msgstr "Pseudogruppe für internen Gebrauch"
+msgstr "Pseudogruppe für internen Gebrauch"
 
-#: html/Search/Elements/EditQuery:47
+#: NOT FOUND IN SOURCE
 msgid "Query"
 msgstr "Suche"
 
-#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195
+#: html/Search/Build.html:121
 msgid "Query Builder"
 msgstr "Suche erstellen"
 
-#: html/Elements/QuickCreate:55 html/Elements/Quicksearch:50 html/Search/Elements/PickBasics:71 html/SelfService/Create.html:54 html/Ticket/Create.html:59 html/Ticket/Elements/EditBasics:57 html/Ticket/Elements/ShowBasics:76 html/User/Elements/DelegateRights:101 lib/RT/Tickets_Overlay.pm:1345
+#: 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:1392
 msgid "Queue"
 msgstr "Bereich"
 
-#: html/Admin/Queues/CustomField.html:63 html/Admin/Queues/Scrip.html:71 html/Admin/Queues/Scrips.html:69 html/Admin/Queues/Templates.html:65
 #. ($Queue)
 #. ($id)
+#: html/Admin/Queues/CustomField.html:63
+#: html/Admin/Queues/Scrip.html:71
+#: html/Admin/Queues/Scrips.html:69
+#: html/Admin/Queues/Templates.html:65
 msgid "Queue %1 not found"
 msgstr "Bereich %2 nicht gefunden"
 
@@ -3178,53 +3777,71 @@ msgstr "Name des Bereichs"
 msgid "Queue already exists"
 msgstr "Bereich existiert bereits"
 
-#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377
+#: lib/RT/Queue_Overlay.pm:371
+#: lib/RT/Queue_Overlay.pm:377
 msgid "Queue could not be created"
 msgstr "Bereich konnte nicht angelegt werden"
 
-#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17
+#: html/Ticket/Create.html:242
+#: lib/t/regression/01ticket_link_searching.t:17
 msgid "Queue could not be loaded."
 msgstr "Bereich konnte nicht geladen werden"
 
-#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809
+#: docs/design_docs/string-extraction-guide.txt:83
+#: lib/RT/Queue_Overlay.pm:381
+#: lib/RT/StyleGuide.pod:809
 msgid "Queue created"
 msgstr "Bereich angelegt"
 
-#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192
+#: html/SelfService/Display.html:95
+#: lib/RT/CustomField_Overlay.pm:192
 msgid "Queue not found"
 msgstr "Bereich nicht gefunden"
 
-#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72
+#: html/Admin/Elements/Tabs:59
+#: html/Admin/index.html:72
 msgid "Queues"
 msgstr "Bereiche"
 
-#: html/Elements/Quicksearch:46
+#: html/Elements/MyAdminQueues:46
+msgid "Queues I administer"
+msgstr "Stapel die ich verwalte"
+
+#: html/Elements/MySupportQueues:46
+msgid "Queues I'm an AdminCc for"
+msgstr "Stapel in denen ich AdminCc bin"
+
+#: html/Elements/Quicksearch:47
+#: html/Prefs/Elements/Tabs:58
+#: html/Prefs/Quicksearch.html:70
 msgid "Quick search"
 msgstr "Schnellsuche"
 
-#: html/Elements/QuickCreate:46
+#: html/Elements/QuickCreate:47
 msgid "Quick ticket creation"
 msgstr "Schnelle Anfrageerstellung"
 
-#: html/Search/Results.html:83
+#: html/Search/Results.html:84
 msgid "RSS"
 msgstr "RSS"
 
-#: html/Elements/Login:66
-#. ($RT::VERSION)
+#: NOT FOUND IN SOURCE
 msgid "RT %1"
 msgstr "RT %1"
 
-#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796
 #. ($RT::VERSION, $RT::rtname)
+#: docs/design_docs/string-extraction-guide.txt:70
+#: lib/RT/StyleGuide.pod:796
 msgid "RT %1 for %2"
-msgstr "RT %1 für %2"
+msgstr "RT %1 für %2"
 
-#: html/Admin/index.html:46 html/Admin/index.html:47
+#: html/Admin/index.html:46
+#: html/Admin/index.html:47
 msgid "RT Administration"
 msgstr "RT Administration"
 
-#: html/Elements/Error:65 html/SelfService/Error.html:62
+#: html/Elements/Error:63
+#: html/SelfService/Error.html:62
 msgid "RT Error"
 msgstr "RT Fehler"
 
@@ -3232,69 +3849,121 @@ msgstr "RT Fehler"
 msgid "RT Variables"
 msgstr "RT Variablen"
 
-#: html/index.html:72 html/index.html:75
+#: html/Prefs/MyRT.html:58
+#: html/Prefs/MyRT.html:70
+#: html/User/Elements/Tabs:65
+#: html/index.html:1
+#: html/index.html:75
 msgid "RT at a glance"
 msgstr "RT auf einen Blick"
 
 #: html/Elements/SetupSessionCookie:90
 msgid "RT couldn't store your session."
-msgstr ""
+msgstr "RT konnte die Session nicht speichern"
 
-#: html/Elements/PageLayout:108
 #. ($RT::rtname)
+#: html/Elements/Logo:49
+#: html/Elements/PageLayout:179
 msgid "RT for %1"
-msgstr "RT für %1"
+msgstr "RT für %1"
+
+#: html/Search/Simple.html:60
+msgid "RT will look for anything else you enter in ticket subjects."
+msgstr "RT wird nach allem suchen was in einem Anfragen Betreff steht."
 
-#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69
+#: html/Admin/Users/Modify.html:79
+#: html/User/Prefs.html:69
 msgid "Real Name"
 msgstr "Echter Name"
 
-#: lib/RT/Transaction_Overlay.pm:714
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:714
 msgid "Reference by %1 added"
-msgstr "Referenz von %1 hinzugefügt"
+msgstr "Referenz von %1 hinzugefügt"
 
-#: lib/RT/Transaction_Overlay.pm:754
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:754
 msgid "Reference by %1 deleted"
-msgstr "Referenz von %1 gelöscht"
+msgstr "Referenz von %1 gelöscht"
 
-#: lib/RT/Transaction_Overlay.pm:711
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:711
 msgid "Reference to %1 added"
-msgstr "Referenz auf %1 hinzugefügt"
+msgstr "Referenz auf %1 hinzugefügt"
 
-#: lib/RT/Transaction_Overlay.pm:751
 #. ($value)
+#: lib/RT/Transaction_Overlay.pm:751
 msgid "Reference to %1 deleted"
-msgstr "Referenz auf %1 gelöscht"
+msgstr "Referenz auf %1 gelöscht"
 
-#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72
+#: html/Elements/EditLinks:103
+#: html/Elements/EditLinks:156
+#: html/Elements/ShowLinks:92
+#: html/Ticket/Create.html:223
+#: html/Ticket/Elements/BulkLinks:72
 msgid "Referred to by"
 msgstr "Referenziert von"
 
-#: html/Elements/EditLinks:150 html/Elements/EditLinks:94 html/Elements/SelectLinkType:49 html/Elements/ShowLinks:82 html/Ticket/Create.html:215 html/Ticket/Elements/BulkLinks:68
+#: html/Elements/EditLinks:152
+#: html/Elements/EditLinks:94
+#: html/Elements/SelectLinkType:49
+#: html/Elements/ShowLinks:82
+#: html/Ticket/Create.html:222
+#: html/Ticket/Elements/BulkLinks:68
 msgid "Refers to"
 msgstr "Bezieht sich auf"
 
-#: html/Elements/Refresh:57
 #. ($value/60)
+#: html/Elements/Refresh:57
 msgid "Refresh this page every %1 minutes."
 msgstr "Seite alle %1 Minuten aktualisieren."
 
-#: html/Search/Bulk.html:116
+#. ($ticket->Subject)
+#: lib/RT/Transaction_Overlay.pm:799
+msgid "Reminder '%1' added"
+msgstr "Wiedervorlage '%1' zugefügt"
+
+#. ($ticket->Subject)
+#: lib/RT/Transaction_Overlay.pm:812
+msgid "Reminder '%1' completed"
+msgstr "Wiedervorlage '%1' abgeschlossen"
+
+#. ($ticket->Subject)
+#: lib/RT/Transaction_Overlay.pm:805
+msgid "Reminder '%1' reopened"
+msgstr "Wiedervorlage '%1' erneut geöffnet"
+
+#. ($Ticket->Id)
+#: html/Ticket/Reminders.html:46
+msgid "Reminder ticket #%1"
+msgstr "Wiedervorlage Anfrage #%1"
+
+#: html/Elements/MyReminders:49
+#: html/Ticket/Elements/ShowSummary:73
+#: html/Ticket/Elements/Tabs:122
+#: html/Ticket/Reminders.html:52
+msgid "Reminders"
+msgstr "Wiedervorlage"
+
+#. ($Ticket->Id)
+#: html/Ticket/Reminders.html:50
+msgid "Reminders for ticket #%1"
+msgstr "Wiedervorlage für Anfrage #%1"
+
+#: html/Search/Bulk.html:94
 msgid "Remove AdminCc"
 msgstr "Entferne AdminCC"
 
-#: html/Search/Bulk.html:112
+#: html/Search/Bulk.html:90
 msgid "Remove Cc"
 msgstr "Entferne CC"
 
-#: html/Search/Bulk.html:108
+#: html/Search/Bulk.html:86
 msgid "Remove Requestor"
 msgstr "Entferne Klient"
 
-#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145
+#: html/Ticket/Elements/ShowTransaction:178
+#: html/Ticket/Elements/Tabs:147
 msgid "Reply"
 msgstr "Antworten"
 
@@ -3302,7 +3971,9 @@ msgstr "Antworten"
 msgid "Reply Address"
 msgstr "Antwort Adresse"
 
-#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76
+#: html/Search/Bulk.html:129
+#: html/Ticket/ModifyAll.html:94
+#: html/Ticket/Update.html:79
 msgid "Reply to requestors"
 msgstr "Antwort an Klienten"
 
@@ -3314,11 +3985,19 @@ msgstr "Antworte auf Anfragen"
 msgid "ReplyToTicket"
 msgstr "AnfrageBeantwortung"
 
-#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112
+#: html/Tools/Elements/Tabs:59
+msgid "Reports"
+msgstr "Auswertungen"
+
+#: etc/initialdata:44
+#: lib/RT/ACE_Overlay.pm:112
 msgid "Requestor"
 msgstr "Klient"
 
-#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52
+#: html/SelfService/Create.html:63
+#: html/Ticket/Create.html:78
+#: html/Ticket/Elements/EditPeople:69
+#: html/Ticket/Elements/ShowPeople:52
 msgid "Requestors"
 msgstr "Klienten"
 
@@ -3326,43 +4005,64 @@ msgstr "Klienten"
 msgid "Requests should be due in"
 msgstr "Anfragen sollten erlegt werden innerhalb"
 
-#: lib/RT/Attribute_Overlay.pm:146
 #. ('Object')
+#: lib/RT/Attribute_Overlay.pm:146
 msgid "Required parameter '%1' not specified"
-msgstr "Benötigter Parameter '%1' nicht angegeben"
+msgstr "Benötigter Parameter '%1' nicht angegeben"
 
-#: html/Elements/Submit:104
+#: html/Elements/Submit:95
 msgid "Reset"
-msgstr "Zurücksetzen"
+msgstr "Zurücksetzen"
 
-#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85
+#: html/Admin/Users/Modify.html:183
+#: html/User/Prefs.html:85
 msgid "Residence"
 msgstr "Zuhause"
 
-#: html/Ticket/Elements/Tabs:155
+#: html/Ticket/Elements/Tabs:157
 msgid "Resolve"
 msgstr "Erledigen"
 
-#: html/Ticket/Update.html:154
 #. ($TicketObj->id, $TicketObj->Subject)
+#: html/Ticket/Update.html:157
 msgid "Resolve ticket #%1 (%2)"
 msgstr "Erledige Anfrage #%1 (%2)"
 
-#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148
+#: etc/initialdata:323
+#: html/Elements/SelectDateType:49
+#: lib/RT/Ticket_Overlay.pm:1149
 msgid "Resolved"
 msgstr "Erledigt"
 
-#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47
+#: html/Tools/Reports/Elements/Tabs:55
+msgid "Resolved by owner"
+msgstr "Gelöst durch Besitzer"
+
+#: html/Tools/Reports/Elements/Tabs:59
+msgid "Resolved in date range"
+msgstr "Gelöst in Zeitraum"
+
+#: html/Tools/Reports/ResolvedByDates.html:7
+msgid "Resolved tickets in period, grouped by owner"
+msgstr "Erledigte Tickets in einer Zeitspanne, gruppiert nach Besitzer"
+
+#: html/Tools/Reports/ResolvedByOwner.html:5
+msgid "Resolved tickets, grouped by owner"
+msgstr "Erledigte Tickets, sortiert nach Besitzer"
+
+#: html/Elements/ListActions:47
+#: html/Search/Elements/NewListActions:47
 msgid "Results"
 msgstr "Ergebnisse"
 
-#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116
+#: html/Admin/Users/Modify.html:126
+#: html/User/Prefs.html:116
 msgid "Retype Password"
 msgstr "Passwort wiederholen"
 
 #: html/Search/Elements/EditSearches:61
 msgid "Revert"
-msgstr "Zurücksetzen"
+msgstr "Zurücksetzen"
 
 #: lib/RT/ACE_Overlay.pm:631
 msgid "Right Delegated"
@@ -3376,41 +4076,50 @@ msgstr "Recht erteilt"
 msgid "Right Loaded"
 msgstr "Recht geladen"
 
-#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717
+#: lib/RT/ACE_Overlay.pm:696
+#: lib/RT/ACE_Overlay.pm:717
 msgid "Right could not be revoked"
-msgstr "Recht konnte nicht zurückgezogen werden"
+msgstr "Recht konnte nicht zurückgezogen werden"
 
 #: html/User/Delegation.html:85
 msgid "Right not found"
 msgstr "Recht nicht gefunden"
 
-#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656
+#: lib/RT/ACE_Overlay.pm:561
+#: lib/RT/ACE_Overlay.pm:656
 msgid "Right not loaded."
 msgstr "Recht nicht gefunden."
 
 #: lib/RT/ACE_Overlay.pm:713
 msgid "Right revoked"
-msgstr "Recht zurückgezogen"
+msgstr "Recht zurückgezogen"
 
 #: html/Admin/Elements/UserTabs:67
 msgid "Rights"
 msgstr "Rechte"
 
-#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901
 #. ($object_type)
+#: html/Admin/CustomFields/GroupRights.html:129
+#: lib/RT/Interface/Web.pm:901
 msgid "Rights could not be granted for %1"
-msgstr "Rechte für %1 konnten nicht gewährt werden"
+msgstr "Rechte für %1 konnten nicht gewährt werden"
 
-#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930
 #. ($object_type)
+#: html/Admin/CustomFields/GroupRights.html:156
+#: lib/RT/Interface/Web.pm:930
 msgid "Rights could not be revoked for %1"
-msgstr "Rechte für %1 konnten nicht entzogen werden"
+msgstr "Rechte für %1 konnten nicht entzogen werden"
 
-#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74
+#: html/Admin/Global/GroupRights.html:72
+#: html/Admin/Queues/GroupRights.html:74
 msgid "Roles"
 msgstr "Rollen"
 
-#: html/Search/Elements/DisplayOptions:83
+#: html/Prefs/MyRT.html:64
+msgid "Rows per box"
+msgstr "Reihen pro Fenster"
+
+#: html/Search/Elements/DisplayOptions:84
 msgid "Rows per page"
 msgstr "Zeilen pro Seite"
 
@@ -3418,35 +4127,54 @@ msgstr "Zeilen pro Seite"
 msgid "Sat."
 msgstr "Sa."
 
+#: html/Prefs/MyRT.html:64
+#: html/Prefs/Quicksearch.html:64
+#: html/Prefs/Search.html:69
 #: html/Search/Elements/EditSearches:70
+#: html/Widgets/SelectionBox:212
 msgid "Save"
 msgstr "Speichern"
 
-#: html/Admin/Global/Template.html:67 html/Admin/Groups/Modify.html:88 html/Admin/Queues/Modify.html:111 html/Admin/Queues/People.html:126 html/Admin/Users/Modify.html:238 html/SelfService/Prefs.html:58 html/Ticket/Modify.html:60 html/Ticket/ModifyAll.html:127 html/Ticket/ModifyDates.html:60 html/Ticket/ModifyLinks.html:60 html/Ticket/ModifyPeople.html:59 html/User/Groups/Modify.html:77
+#: html/Admin/Global/Template.html:67
+#: html/Admin/Groups/Modify.html:88
+#: html/Admin/Queues/Modify.html:111
+#: html/Admin/Queues/People.html:126
+#: html/Admin/Users/Modify.html:238
+#: html/Prefs/Quicksearch.html:64
+#: html/Prefs/SearchOptions.html:63
+#: html/SelfService/Prefs.html:58
+#: html/Ticket/Modify.html:60
+#: html/Ticket/ModifyAll.html:127
+#: html/Ticket/ModifyDates.html:59
+#: html/Ticket/ModifyLinks.html:60
+#: html/Ticket/ModifyPeople.html:59
+#: html/User/Groups/Modify.html:77
 msgid "Save Changes"
-msgstr "Änderungen Sichern"
+msgstr "Änderungen Sichern"
 
 #: html/User/Prefs.html:179
 msgid "Save Preferences"
 msgstr "Einstellungen speichern"
 
-#: html/Ticket/Elements/PreviewScrips:124
+#: html/Ticket/Elements/PreviewScrips:126
 msgid "Save changes"
-msgstr "Änderungen Sichern"
+msgstr "Änderungen Sichern"
 
-#: lib/RT/SavedSearch.pm:162
 #. ($name)
+#: lib/RT/SavedSearch.pm:162
 msgid "Saved search %1"
-msgstr ""
+msgstr "Gespeicherte Suche %1"
 
 #: html/Search/Elements/EditSearches:46
 msgid "Saved searches"
 msgstr "Gespeicherte Suchanfragen"
 
-#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76
 #. ($scrip->Id)
 #. ($id)
 #. ($ARGS{'id'})
+#: html/Admin/Elements/ListGlobalScrips:61
+#: html/Admin/Global/Scrip.html:70
+#: html/Admin/Queues/Scrip.html:76
 msgid "Scrip #%1"
 msgstr "Scrip #%1"
 
@@ -3460,9 +4188,11 @@ msgstr "Scrip Felder"
 
 #: html/Admin/Elements/EditScrips:107
 msgid "Scrip deleted"
-msgstr "Scrip gelöscht"
+msgstr "Scrip gelöscht"
 
-#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62
+#: html/Admin/Elements/QueueTabs:67
+#: html/Admin/Elements/SystemTabs:54
+#: html/Admin/Global/index.html:62
 msgid "Scrips"
 msgstr "Scrips"
 
@@ -3470,34 +4200,61 @@ msgstr "Scrips"
 msgid "Scrips which apply to all queues"
 msgstr "Auf alle Bereiche angewandte Scrips"
 
-#: html/Elements/SimpleSearch:48 html/Search/Build.html:112
+#: html/Elements/SimpleSearch:48
+#: html/Search/Simple.html:65
 msgid "Search"
 msgstr "Suchen"
 
+#: html/Prefs/SearchOptions.html:47
+#: html/Prefs/SearchOptions.html:50
+msgid "Search Preferences"
+msgstr "Such Einstellungen"
+
 #: lib/RT/SavedSearch.pm:116
 msgid "Search attribute load failure"
-msgstr ""
+msgstr "Suchattribut lade Fehler"
 
-#: html/Approvals/Elements/PendingMyApproval:60
+#: html/Approvals/Elements/PendingMyApproval:59
 msgid "Search for approvals"
 msgstr "Suche nach Freigaben"
 
-#: lib/RT/SavedSearch.pm:194
+#: html/Search/Simple.html:69
+msgid "Search for tickets"
+msgstr "Suche nach Anfragen"
+
+#: html/Search/Simple.html:57
+msgid "Search for tickets. Enter <strong>id</strong> numbers,<strong>queues</strong> by name"
+msgstr "Suche nach Tickets. Eingabe <strong>id</strong> Nummer,<strong>Stapel</strong> nach Name"
+
+#: html/User/Elements/Tabs:62
+msgid "Search options"
+msgstr "Such Optionen"
+
+#. ($PrimaryGroupBy)
+#: html/Search/Chart.html:7
+msgid "Search results grouped by %1"
+msgstr "Suchergebnis gruppiert nach %1"
+
 #. ($msg)
+#: lib/RT/SavedSearch.pm:194
 msgid "Search update: %1"
-msgstr ""
+msgstr "Suche erneuern: %1"
+
+#: html/Search/Simple.html:59
+msgid "Searching the full text of every ticket can take a long time, but if you need to do it, you can search for any word in full ticket history for any word by typing <b>fulltext:<i>word</i></b>."
+msgstr "Die Suche nach Volltexten in jedem Ticket kann sehr lange dauern, aber wenn Du es benötigst, kannst Du nach jedem Wort in jedem Ticketverlauf suchen indem Du <b>fulltext:<i>Wort</i></b> eingibst."
 
 #: bin/rt-crontool:213
 msgid "Security:"
 msgstr "Sicherheit:"
 
-#: lib/RT/CustomField_Overlay.pm:100
+#: lib/RT/CustomField_Overlay.pm:105
 msgid "See custom fields"
 msgstr "Benutzerdefinierte Felder anzeigen"
 
 #: lib/RT/Queue_Overlay.pm:107
 msgid "See exact outgoing email messages and their recipeients"
-msgstr "Anzeigen der gesendeten Nachricht und deren Empfänger"
+msgstr "Anzeigen der gesendeten Nachricht und deren Empfänger"
 
 #: lib/RT/Queue_Overlay.pm:105
 msgid "See ticket private commentary"
@@ -3507,7 +4264,7 @@ msgstr "Anzeigen von anfrage-privaten Kommentaren"
 msgid "See ticket summaries"
 msgstr "Anfrage Zusammenfassungen anzeigen"
 
-#: lib/RT/CustomField_Overlay.pm:100
+#: lib/RT/CustomField_Overlay.pm:105
 msgid "SeeCustomField"
 msgstr "Benutzerdefiniertes Feld anzeigen"
 
@@ -3523,85 +4280,103 @@ msgstr "BereichAnzeigen"
 msgid "Select"
 msgstr "Auswahl"
 
-#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49
+#: html/Admin/CustomFields/index.html:46
+#: html/Admin/CustomFields/index.html:49
 msgid "Select a Custom Field"
-msgstr "Wählen Sie ein benutzerdefiniertes Feld aus"
+msgstr "Wählen Sie ein benutzerdefiniertes Feld aus"
 
 #: html/Admin/Groups/index.html:78
 msgid "Select a group"
-msgstr "Wählen Sie eine Gruppe aus"
+msgstr "Wählen Sie eine Gruppe aus"
 
 #: html/Admin/Queues/index.html:54
 msgid "Select a queue"
-msgstr ""
+msgstr "Stapel auswählen"
 
 #: html/SelfService/CreateTicketInQueue.html:48
 msgid "Select a queue for your new ticket"
-msgstr "Wählen Sie einen Bereich für Ihre neue Anfrage"
+msgstr "Wählen Sie einen Bereich für Ihre neue Anfrage"
 
-#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52
+#: html/Admin/Users/index.html:46
+#: html/Admin/Users/index.html:49
+#: html/Admin/Users/index.html:52
 msgid "Select a user"
-msgstr "Wählen Sie einen Benutzer aus"
+msgstr "Wählen Sie einen Benutzer aus"
 
 #: html/Admin/Elements/CustomFieldTabs:90
 msgid "Select custom field"
-msgstr "Wählen Sie ein benutzerdefiniertes Feld"
+msgstr "Wählen Sie ein benutzerdefiniertes Feld"
 
 #: html/Admin/Global/CustomFields/index.html:70
 msgid "Select custom fields for all user groups"
-msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzergruppen aus"
+msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzergruppen aus"
 
 #: html/Admin/Global/CustomFields/index.html:65
 msgid "Select custom fields for all users"
-msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzer aus"
+msgstr "Wählen Sie benutzerdefinierte Felder für alle Benutzer aus"
 
 #: html/Admin/Global/CustomFields/index.html:76
 msgid "Select custom fields for tickets in all queues"
-msgstr "Wählen Sie benutzerdefinierte Felder für alle Anfragen in allen Bereichen aus"
+msgstr "Wählen Sie benutzerdefinierte Felder für alle Anfragen in allen Bereichen aus"
 
 #: html/Admin/Global/CustomFields/index.html:83
 msgid "Select custom fields for transactions on tickets in all queues"
-msgstr "Wählen Sie benutzerdefinierte Felder für Transaktionen mit Anfragen in allen Bereichen aus "
+msgstr "Wählen Sie benutzerdefinierte Felder für Transaktionen mit Anfragen in allen Bereichen aus "
 
-#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71
+#: html/Admin/Elements/GroupTabs:75
+#: html/User/Elements/GroupTabs:71
 msgid "Select group"
-msgstr "Wählen Sie eine Gruppe aus"
+msgstr "Wählen Sie eine Gruppe aus"
 
 #: lib/RT/CustomField_Overlay.pm:59
 msgid "Select multiple values"
-msgstr "Wählen Sie mehrere Werte aus"
+msgstr "Wählen Sie mehrere Werte aus"
 
 #: lib/RT/CustomField_Overlay.pm:60
 msgid "Select one value"
-msgstr "Wählen Sie einen Wert aus"
+msgstr "Wählen Sie einen Wert aus"
 
 #: html/Admin/Elements/QueueTabs:92
 msgid "Select queue"
-msgstr "Wählen Sie einen Bereich aus"
+msgstr "Wählen Sie einen Bereich aus"
+
+#: html/Prefs/Quicksearch.html:53
+msgid "Select queues to be displayed on the \"RT at a glance\" page"
+msgstr "Wähle Stapel aus, welche auf der \"RT at a glance\" Seite angezeigt werden"
 
-#: html/Admin/Global/Scrip.html:58 html/Admin/Global/Scrips.html:57 html/Admin/Queues/Scrip.html:61 html/Admin/Queues/Scrips.html:73
+#: html/Admin/Global/Scrip.html:58
+#: html/Admin/Global/Scrips.html:57
+#: html/Admin/Queues/Scrip.html:61
+#: html/Admin/Queues/Scrips.html:73
 msgid "Select scrip"
-msgstr "Wählen Sie ein Scrip aus"
+msgstr "Wählen Sie ein Scrip aus"
 
-#: html/Admin/Global/Template.html:78 html/Admin/Global/Templates.html:57 html/Admin/Queues/Template.html:76 html/Admin/Queues/Templates.html:68
+#: html/Admin/Global/Template.html:78
+#: html/Admin/Global/Templates.html:57
+#: html/Admin/Queues/Template.html:76
+#: html/Admin/Queues/Templates.html:68
 msgid "Select template"
-msgstr "Wählen Sie eine Vorlage aus"
+msgstr "Wählen Sie eine Vorlage aus"
 
 #: lib/RT/CustomField_Overlay.pm:61
 msgid "Select up to %1 values"
-msgstr "Wählen Sie bis zu %1 Werte aus"
+msgstr "Wählen Sie bis zu %1 Werte aus"
 
 #: html/Admin/Elements/UserTabs:75
 msgid "Select user"
-msgstr "Wählen Sie einen Benutzer aus"
+msgstr "Wählen Sie einen Benutzer aus"
 
 #: html/Admin/Elements/EditCustomFields:58
 msgid "Selected Custom Fields"
-msgstr "Ausgewählte Benutzerdefinierte Felder"
+msgstr "Ausgewählte Benutzerdefinierte Felder"
 
 #: html/Admin/CustomFields/Objects.html:59
 msgid "Selected objects"
-msgstr "Ausgewählte Objekte"
+msgstr "Ausgewählte Objekte"
+
+#: html/Widgets/SelectionBox:210
+msgid "Selections modified. Please save your changes"
+msgstr "Auswahl wurde geändert. Bitte speichere Deine Änderungen"
 
 #: etc/initialdata:121
 msgid "Send mail to all watchers"
@@ -3623,15 +4398,18 @@ msgstr "Schickt einen Kommentar an die Klienten und CCs"
 msgid "Sends a message to the requestors"
 msgstr "Schickt eine Nachricht an die Klienten"
 
-#: etc/initialdata:125 etc/initialdata:129
+#: etc/initialdata:125
+#: etc/initialdata:129
 msgid "Sends mail to explicitly listed Ccs and Bccs"
 msgstr "Schickt eine Nachricht an die direkt angegebenen CCs und BCCs"
 
-#: etc/initialdata:94 etc/upgrade/3.1.17/content:7
+#: etc/initialdata:94
+#: etc/upgrade/3.1.17/content:7
 msgid "Sends mail to the Ccs"
 msgstr "Schickt eine Nachricht an alle CCs"
 
-#: etc/initialdata:90 etc/upgrade/3.1.17/content:3
+#: etc/initialdata:90
+#: etc/upgrade/3.1.17/content:3
 msgid "Sends mail to the Ccs as a comment"
 msgstr "Schickt einen Kommentar an alle CCs "
 
@@ -3643,7 +4421,8 @@ msgstr "Schickt eine Nachricht an die administrativen CCs"
 msgid "Sends mail to the administrative Ccs as a comment"
 msgstr "Schickt einen Kommentar an die administrativen CCs"
 
-#: etc/initialdata:82 etc/initialdata:86
+#: etc/initialdata:82
+#: etc/initialdata:86
 msgid "Sends mail to the owner"
 msgstr "Schickt eine Nachricht an den Besitzer"
 
@@ -3651,7 +4430,7 @@ msgstr "Schickt eine Nachricht an den Besitzer"
 msgid "Sep."
 msgstr "Sep."
 
-#: html/Ticket/Elements/ShowTransaction:150
+#: html/Ticket/Elements/ShowTransaction:157
 msgid "Show"
 msgstr "Zeige"
 
@@ -3663,31 +4442,31 @@ msgstr "Zeige Freigaben"
 msgid "Show Columns"
 msgstr "Zeige Spalten"
 
-#: html/Ticket/Elements/Tabs:201
+#: html/Ticket/Elements/Tabs:213
 msgid "Show Results"
 msgstr "Zeige Ergebnisse"
 
-#: html/Approvals/Elements/PendingMyApproval:65
+#: html/Approvals/Elements/PendingMyApproval:64
 msgid "Show approved requests"
 msgstr "Zeige freigegebene Anfragen"
 
-#: html/Ticket/Create.html:174 html/Ticket/Create.html:55
+#: html/Ticket/Create.html:305
 msgid "Show basics"
 msgstr "Zeige Grundlagen"
 
-#: html/Approvals/Elements/PendingMyApproval:66
+#: html/Approvals/Elements/PendingMyApproval:65
 msgid "Show denied requests"
 msgstr "Zeige abgelehnte Anfragen"
 
-#: html/Ticket/Create.html:174 html/Ticket/Create.html:55
+#: html/Ticket/Create.html:308
 msgid "Show details"
 msgstr "Zeige Details"
 
-#: html/Approvals/Elements/PendingMyApproval:64
+#: html/Approvals/Elements/PendingMyApproval:63
 msgid "Show pending requests"
-msgstr "Zeige anhängige Anfragen"
+msgstr "Zeige anhängige Anfragen"
 
-#: html/Approvals/Elements/PendingMyApproval:67
+#: html/Approvals/Elements/PendingMyApproval:66
 msgid "Show requests awaiting other approvals"
 msgstr "Zeige auf andere Freigaben wartende Anfragen"
 
@@ -3697,7 +4476,7 @@ msgstr "ACLAnzeigen"
 
 #: lib/RT/System.pm:86
 msgid "ShowConfigTab"
-msgstr "KonfigurationsMenüAnzeigen"
+msgstr "KonfigurationsMenüAnzeigen"
 
 #: lib/RT/Queue_Overlay.pm:107
 msgid "ShowOutgoingEmail"
@@ -3731,27 +4510,33 @@ msgstr "Als Klient einer Anfrage oder Anfrage- bzw. Bereichs-CC eintragen"
 msgid "Sign up as a ticket or queue AdminCc"
 msgstr "Als Anfrage- oder Bereichs-AdminCC eintragen"
 
-#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167
+#: html/Admin/Users/Modify.html:229
+#: html/User/Prefs.html:167
 msgid "Signature"
 msgstr "E-Mail-Signatur"
 
+#: html/Elements/Tabs:68
+msgid "Simple Search"
+msgstr "Vereinfachte Suche"
+
 #: html/Admin/Elements/SelectSingleOrMultiple:47
 msgid "Single"
 msgstr "Einzel"
 
 #: html/Search/Elements/EditFormat:75
 msgid "Size"
-msgstr ""
+msgstr "Grösse"
 
-#: html/Elements/Header:85
+#: html/Elements/Header:80
 msgid "Skip Menu"
-msgstr "Überspringe Menü"
+msgstr "Überspringe Menü"
 
 #: html/Search/Elements/EditFormat:78
 msgid "Small"
 msgstr "Klein"
 
-#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54
+#: html/Admin/Elements/AddCustomFieldValue:49
+#: html/Admin/Elements/EditCustomFieldValues:54
 msgid "Sort"
 msgstr "Sortieren"
 
@@ -3759,63 +4544,91 @@ msgstr "Sortieren"
 msgid "Stage"
 msgstr "Phase"
 
-#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56
+#: html/Elements/SelectDateType:48
+#: html/Ticket/Elements/EditDates:53
+#: html/Ticket/Elements/ShowDates:56
 msgid "Started"
 msgstr "Begonnen"
 
-#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52
+#: html/Elements/SelectDateType:52
+#: html/Ticket/Create.html:206
+#: html/Ticket/Elements/EditDates:48
+#: html/Ticket/Elements/ShowDates:52
 msgid "Starts"
 msgstr "Beginnt"
 
-#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145
+#: html/Admin/Users/Modify.html:162
+#: html/User/Prefs.html:145
 msgid "State"
 msgstr "Staat"
 
-#: html/Search/Elements/PickBasics:87 html/SelfService/Elements/MyRequests:50 html/SelfService/Update.html:57 html/Ticket/Create.html:63 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:52 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1142 lib/RT/Tickets_Overlay.pm:1378
+#: 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:1425
 msgid "Status"
 msgstr "Status"
 
 #: etc/initialdata:309
 msgid "Status Change"
-msgstr "Statusänderung"
+msgstr "Statusänderung"
 
 #: NOT FOUND IN SOURCE
 msgid "Status changed from %1 to %2"
-msgstr "Status von %1 auf %2 geändert"
+msgstr "Status von %1 auf %2 geändert"
 
-#: html/Ticket/Elements/Tabs:170
+#: html/Ticket/Elements/Tabs:172
 msgid "Steal"
-msgstr "Stehlen"
+msgstr "Übernehmen"
 
 #: lib/RT/Queue_Overlay.pm:118
 msgid "Steal tickets"
-msgstr "Anfragen stehlen"
+msgstr "Anfragen übernehmen"
 
 #: lib/RT/Queue_Overlay.pm:118
 msgid "StealTicket"
-msgstr "AnfrageStehlen"
+msgstr "AnfrageÜbernehmen"
 
-#: lib/RT/Transaction_Overlay.pm:667
 #. ($Old->Name)
+#: lib/RT/Transaction_Overlay.pm:667
 msgid "Stolen from %1"
 msgstr "Gestohlen von %1"
 
 #: html/Search/Elements/EditFormat:81
 msgid "Style"
-msgstr ""
+msgstr "Darstellung"
 
-#: html/Elements/QuickCreate:52 html/Elements/SelectAttachmentField:47 html/Search/Bulk.html:154 html/SelfService/Create.html:79 html/SelfService/Elements/MyRequests:49 html/SelfService/Update.html:65 html/Ticket/Create.html:105 html/Ticket/Elements/EditBasics:48 html/Ticket/ModifyAll.html:100 html/Ticket/Update.html:80 lib/RT/Ticket_Overlay.pm:1138 lib/RT/Tickets_Overlay.pm:1460
+#: 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:1507
 msgid "Subject"
 msgstr "Betreff"
 
-#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689
 #. ($self->Data)
+#: docs/design_docs/string-extraction-guide.txt:89
+#: lib/RT/StyleGuide.pod:815
+#: lib/RT/Transaction_Overlay.pm:689
 msgid "Subject changed to %1"
-msgstr "Betreff wurde auf %1 geändert"
+msgstr "Betreff wurde auf %1 geändert"
 
-#: html/Elements/Submit:97
+#: html/Elements/Submit:88
 msgid "Submit"
-msgstr "Übermitteln"
+msgstr "Übermitteln"
 
 #: lib/RT/Group_Overlay.pm:782
 msgid "Succeeded"
@@ -3833,18 +4646,27 @@ msgstr "SuperBenutzer"
 msgid "System"
 msgstr "System"
 
-#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48
+#: html/Admin/Elements/ToolTabs:54
+#: html/Admin/Tools/Configuration.html:48
 msgid "System Configuration"
 msgstr "System Konfiguration"
 
-#: html/Admin/CustomFields/GroupRights.html:128 html/Admin/CustomFields/GroupRights.html:155 html/Admin/CustomFields/UserRights.html:128 html/Admin/CustomFields/UserRights.html:98 html/Admin/Elements/SelectRights:106 lib/RT/ACE_Overlay.pm:585 lib/RT/Interface/Web.pm:900 lib/RT/Interface/Web.pm:929
+#: html/Admin/CustomFields/GroupRights.html:128
+#: html/Admin/CustomFields/GroupRights.html:155
+#: html/Admin/CustomFields/UserRights.html:128
+#: html/Admin/CustomFields/UserRights.html:98
+#: html/Admin/Elements/SelectRights:106
+#: lib/RT/ACE_Overlay.pm:585
+#: lib/RT/Interface/Web.pm:900
+#: lib/RT/Interface/Web.pm:929
 msgid "System Error"
 msgstr "Systemfehler"
 
-#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221
 #. ($msg)
+#: lib/RT/Transaction_Overlay.pm:215
+#: lib/RT/Transaction_Overlay.pm:221
 msgid "System Error: %1"
-msgstr ""
+msgstr "System Fehlerr: %1"
 
 #: html/Admin/Tools/index.html:47
 msgid "System Tools"
@@ -3854,50 +4676,62 @@ msgstr "System Werkzeuge"
 msgid "System error. Right not delegated."
 msgstr "Systemfehler. Recht nicht delegiert."
 
-#: lib/RT/ACE_Overlay.pm:164 lib/RT/ACE_Overlay.pm:229 lib/RT/ACE_Overlay.pm:324 lib/RT/ACE_Overlay.pm:921
+#: lib/RT/ACE_Overlay.pm:164
+#: lib/RT/ACE_Overlay.pm:229
+#: lib/RT/ACE_Overlay.pm:324
+#: lib/RT/ACE_Overlay.pm:921
 msgid "System error. Right not granted."
-msgstr "Systemfehler. Recht nicht gewährt."
+msgstr "Systemfehler. Recht nicht gewährt."
 
-#: html/Admin/CustomFields/GroupRights.html:58 html/Admin/Global/GroupRights.html:56 html/Admin/Groups/GroupRights.html:58 html/Admin/Queues/GroupRights.html:57
+#: html/Admin/CustomFields/GroupRights.html:58
+#: html/Admin/Global/GroupRights.html:56
+#: html/Admin/Groups/GroupRights.html:58
+#: html/Admin/Queues/GroupRights.html:57
 msgid "System groups"
 msgstr "Systemgruppen"
 
-#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53
+#: etc/initialdata:41
+#: etc/initialdata:47
+#: etc/initialdata:53
 msgid "SystemRolegroup for internal use"
-msgstr "SystemRolegroup für internen Gebrauch"
+msgstr "SystemRolegroup für internen Gebrauch"
 
 #: lib/RT/CurrentUser.pm:358
 msgid "TEST_STRING"
 msgstr "TEST_STRING"
 
-#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166
+#: etc/initialdata:603
+#: html/Search/Elements/EditFormat:72
+#: html/Ticket/Elements/Tabs:168
 msgid "Take"
-msgstr "Übernehmen"
+msgstr "Übernehmen"
 
 #: lib/RT/Queue_Overlay.pm:116
 msgid "Take tickets"
-msgstr "Anfragen übernehmen"
+msgstr "Anfragen übernehmen"
 
 #: lib/RT/Queue_Overlay.pm:116
 msgid "TakeTicket"
-msgstr "AnfrageÜbernehmen"
+msgstr "AnfrageÜbernehmen"
 
 #: lib/RT/Transaction_Overlay.pm:652
 msgid "Taken"
-msgstr "Übernommen"
+msgstr "Übernommen"
 
-#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78
+#: html/Admin/Elements/EditScrip:79
+#: html/Tools/Offline.html:78
 msgid "Template"
 msgstr "Vorlage"
 
-#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113
 #. ($TemplateObj->Id())
+#: html/Admin/Global/Template.html:112
+#: html/Admin/Queues/Template.html:113
 msgid "Template #%1"
 msgstr "Vorlage #%1"
 
 #: html/Admin/Elements/EditTemplates:110
 msgid "Template deleted"
-msgstr "Vorlage gelöscht"
+msgstr "Vorlage gelöscht"
 
 #: lib/RT/Scrip_Overlay.pm:181
 msgid "Template not found"
@@ -3907,7 +4741,9 @@ msgstr "Vorlage nicht gefunden"
 msgid "Template parsed"
 msgstr "Vorlagen eingelesen"
 
-#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66
+#: html/Admin/Elements/QueueTabs:70
+#: html/Admin/Elements/SystemTabs:57
+#: html/Admin/Global/index.html:66
 msgid "Templates"
 msgstr "Vorlagen"
 
@@ -3915,50 +4751,52 @@ msgstr "Vorlagen"
 msgid "Text"
 msgstr "Text"
 
-#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931
+#: lib/RT/CustomField_Overlay.pm:931
+#: lib/RT/Record.pm:935
 msgid "That is already the current value"
 msgstr "Das ist bereits der aktuelle Wert"
 
-#: lib/RT/CustomField_Overlay.pm:407
+#: lib/RT/CustomField_Overlay.pm:406
 msgid "That is not a value for this custom field"
-msgstr "Dies ist kein gültiger Wert für dieses benutzerdefinierte Feld"
+msgstr "Dies ist kein gültiger Wert für dieses benutzerdefinierte Feld"
 
-#: lib/RT/Ticket_Overlay.pm:1955
+#: lib/RT/Ticket_Overlay.pm:1956
 msgid "That is the same value"
 msgstr "Das ist der gleiche Wert"
 
-#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615
+#: lib/RT/ACE_Overlay.pm:306
+#: lib/RT/ACE_Overlay.pm:615
 msgid "That principal already has that right"
 msgstr "Diese Rolle hat dieses Recht bereits"
 
-#: lib/RT/Queue_Overlay.pm:750
 #. ($args{'Type'})
+#: lib/RT/Queue_Overlay.pm:750
 msgid "That principal is already a %1 for this queue"
 msgstr "Diese Rolle ist bereits ein %1 dieses Bereichs"
 
-#: lib/RT/Ticket_Overlay.pm:1396
 #. ($self->loc($args{'Type'}))
+#: lib/RT/Ticket_Overlay.pm:1397
 msgid "That principal is already a %1 for this ticket"
 msgstr "Diese Rolle ist bereits ein %1 dieser Anfrage"
 
-#: lib/RT/Queue_Overlay.pm:849
 #. ($args{'Type'})
+#: lib/RT/Queue_Overlay.pm:849
 msgid "That principal is not a %1 for this queue"
 msgstr "Diese Rolle ist nicht ein %1 dieses Bereichs"
 
-#: lib/RT/Ticket_Overlay.pm:1951
+#: lib/RT/Ticket_Overlay.pm:1952
 msgid "That queue does not exist"
 msgstr "Dieser Bereich existiert nicht"
 
-#: lib/RT/Ticket_Overlay.pm:3189
+#: lib/RT/Ticket_Overlay.pm:3172
 msgid "That ticket has unresolved dependencies"
-msgstr "Diese Anfrage hat ungelöste Abhängigkeiten"
+msgstr "Diese Anfrage hat ungelöste Abhängigkeiten"
 
-#: lib/RT/Ticket_Overlay.pm:2993
+#: lib/RT/Ticket_Overlay.pm:2976
 msgid "That user already owns that ticket"
-msgstr "Diese Anfrage gehört bereits diesem Benutzer"
+msgstr "Diese Anfrage gehört bereits diesem Benutzer"
 
-#: lib/RT/Ticket_Overlay.pm:2965
+#: lib/RT/Ticket_Overlay.pm:2948
 msgid "That user does not exist"
 msgstr "Dieser Benutzer existiert nicht"
 
@@ -3978,15 +4816,17 @@ msgstr "Dieser Benutzer ist jetzt privilegiert"
 msgid "That user is now unprivileged"
 msgstr "Dieser Benutzer ist jetzt unprivilegiert"
 
-#: lib/RT/Ticket_Overlay.pm:2986
+#: lib/RT/Ticket_Overlay.pm:2969
 msgid "That user may not own tickets in that queue"
-msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Bereich gehören"
+msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Bereich gehören"
 
 #: lib/RT/Link_Overlay.pm:234
 msgid "That's not a numerical id"
 msgstr "Dies ist keine numerische ID"
 
-#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49
+#: html/SelfService/Display.html:53
+#: html/Ticket/Create.html:175
+#: html/Ticket/Elements/ShowSummary:49
 msgid "The Basics"
 msgstr "Grundlagen"
 
@@ -4000,9 +4840,9 @@ msgstr "Der administrative CC einer Anfrage"
 
 #: 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 ""
+msgstr "Das nachfolgende Kommando findet alle aktiven Tickets in dem Stapel 'General' und setzt deren Priorität auf 99 wenn die seit 4 Stunden nicht bearbeitet wurden:"
 
-#: lib/RT/Record.pm:934
+#: lib/RT/Record.pm:938
 msgid "The new value has been set."
 msgstr "Der neue Wert wurde gesetzt."
 
@@ -4016,32 +4856,30 @@ msgstr "Der Klient einer Anfrage"
 
 #: html/Admin/Elements/EditUserComments:47
 msgid "These comments aren't generally visible to the user"
-msgstr "Diese Kommentare sind generell nicht für den Benutzer sichtbar"
+msgstr "Diese Kommentare sind generell nicht für den Benutzer sichtbar"
 
-#: lib/RT/CustomField_Overlay.pm:912
+#: lib/RT/CustomField_Overlay.pm:966
 msgid "This custom field does not apply to that object"
 msgstr "Dieses benutzerdefinierte Feld passt nicht zum Objekt"
 
 #: html/Admin/Tools/Configuration.html:50
 msgid "This feature is only available to system administrators"
-msgstr "Dieses Feature ist nur für Systemadministratoren verfügbar"
+msgstr "Dieses Feature ist nur für Systemadministratoren verfügbar"
 
 #: html/Ticket/Elements/PreviewScrips:93
 msgid "This message will be sent to..."
-msgstr "Diese Nachricht wird an folgende Empfänger gesendet:"
+msgstr "Diese Nachricht wird an folgende Empfänger gesendet:"
 
 #: bin/rt-crontool:214
 msgid "This tool allows the user to run arbitrary perl modules from within RT."
-msgstr ""
-"Dieses Werkzeug erlaubt es Benutzern beliebige Perl-Module von RT aus "
-"aufzurufen."
+msgstr "Dieses Werkzeug erlaubt es Benutzern beliebige Perl-Module von RT aus aufzurufen."
 
 #: lib/RT/Transaction_Overlay.pm:288
 msgid "This transaction appears to have no content"
 msgstr "Diese Transaktion scheint keinen Inhalt zu haben"
 
-#: html/Ticket/Elements/ShowRequestor:70
 #. ($rows)
+#: html/Ticket/Elements/ShowRequestor:69
 msgid "This user's %1 highest priority tickets"
 msgstr "Die %1 dringensten Anfragen dieses Benutzers"
 
@@ -4049,30 +4887,36 @@ msgstr "Die %1 dringensten Anfragen dieses Benutzers"
 msgid "Thu."
 msgstr "Do."
 
-#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50
 #. ($Ticket->Id, $Ticket->Subject)
+#: html/Ticket/ModifyAll.html:46
+#: html/Ticket/ModifyAll.html:50
 msgid "Ticket #%1 Jumbo update: %2"
 msgstr "Anfrage #%1 Alles aktualisieren: %2"
 
-#: html/Approvals/Elements/ShowDependency:67
 #. ($link->BaseObj->Id, $link->BaseObj->Subject)
+#: html/Approvals/Elements/ShowDependency:67
 msgid "Ticket #%1: %2"
 msgstr "Anfrage #%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
 #. ($T::Tickets{$template_id}->Id)
 #. ($T::Tickets{$template_id}->id)
 #. ($ticket->Id)
+#: 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
 msgid "Ticket %1"
 msgstr "Anfrage %1"
 
-#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751
 #. ($self->Id, $QueueObj->Name)
+#: lib/RT/Ticket_Overlay.pm:732
+#: lib/RT/Ticket_Overlay.pm:752
 msgid "Ticket %1 created in queue '%2'"
 msgstr "Anfrage %1 wurde im Bereich '%2' angelegt"
 
-#: html/Search/Bulk.html:269
-#. ($Ticket->Id,$_)
+#. ($Ticket->Id, $_)
+#: html/Search/Bulk.html:365
 msgid "Ticket %1: %2"
 msgstr "Anfrage %1: %2"
 
@@ -4080,8 +4924,9 @@ msgstr "Anfrage %1: %2"
 msgid "Ticket Custom Fields"
 msgstr "Benutzerdefinierte Anfrage Felder"
 
-#: html/Ticket/History.html:46 html/Ticket/History.html:49
 #. ($Ticket->Id, $Ticket->Subject)
+#: html/Ticket/History.html:46
+#: html/Ticket/History.html:49
 msgid "Ticket History # %1 %2"
 msgstr "Geschichte von Anfrage #%1 %2"
 
@@ -4089,19 +4934,24 @@ msgstr "Geschichte von Anfrage #%1 %2"
 msgid "Ticket Resolved"
 msgstr "Anfrage erledigt"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085
+#: html/Admin/Elements/GlobalCustomFieldTabs:69
+#: html/Admin/Global/CustomFields/index.html:81
+#: lib/RT/CustomField_Overlay.pm:1188
 msgid "Ticket Transactions"
 msgstr "Anfrage Transaktion"
 
-#: lib/RT/Tickets_Overlay.pm:1648
+#: lib/RT/Tickets_Overlay.pm:1695
 msgid "Ticket content"
 msgstr "Inhalt der Anfrage"
 
-#: lib/RT/Tickets_Overlay.pm:1697
+#: lib/RT/Tickets_Overlay.pm:1744
 msgid "Ticket content type"
 msgstr "Art des Inhalts der Anfrage"
 
-#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739
+#: lib/RT/Ticket_Overlay.pm:594
+#: lib/RT/Ticket_Overlay.pm:608
+#: lib/RT/Ticket_Overlay.pm:619
+#: lib/RT/Ticket_Overlay.pm:740
 msgid "Ticket could not be created due to an internal error"
 msgstr "Anfrage konnte aufgrund eines internen Fehlers nicht angelegt werden"
 
@@ -4111,72 +4961,106 @@ msgstr "Anfrage Metadaten"
 
 #: etc/initialdata:310
 msgid "Ticket status changed"
-msgstr "Status der Anfrage geändert"
+msgstr "Status der Anfrage geändert"
 
-#: lib/RT/Search/FromSQL.pm:83
 #. (ref $self)
+#: lib/RT/Search/FromSQL.pm:83
 msgid "TicketSQL search module"
-msgstr "SQL Anfrage Suchmodul"
+msgstr "TicketSQL Suchmodul"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084
+#: html/Admin/Elements/GlobalCustomFieldTabs:64
+#: html/Admin/Global/CustomFields/index.html:75
+#: html/Elements/Tabs:71
+#: html/Search/Elements/Chart:52
+#: lib/RT/CustomField_Overlay.pm:1187
 msgid "Tickets"
 msgstr "Anfragen"
 
+#: html/Tools/Reports/CreatedByDates.html:41
+msgid "Tickets created after"
+msgstr "Anfragen erstellt nach"
+
+#: html/Tools/Reports/CreatedByDates.html:43
+msgid "Tickets created before"
+msgstr "Anfragen erstellt vor"
+
+#: html/Tools/Reports/ResolvedByDates.html:42
+msgid "Tickets resolved after"
+msgstr "Anfragen gelöst nach"
+
+#: html/Tools/Reports/ResolvedByDates.html:44
+msgid "Tickets resolved before"
+msgstr "Anfragen gelöst vor"
+
 #: html/Approvals/Elements/ShowDependency:48
 msgid "Tickets which depend on this approval:"
-msgstr "Anfragen, die von dieser Freigabe abhängen:"
+msgstr "Anfragen, die von dieser Freigabe abhängen:"
 
-#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61
+#: html/Search/Elements/PickBasics:134
+#: html/Ticket/Create.html:181
+#: html/Ticket/Elements/EditBasics:67
 msgid "Time Estimated"
-msgstr "Geschätzte Zeit"
+msgstr "Geschätzte Zeit"
 
-#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69
+#: html/Search/Elements/PickBasics:135
+#: html/Ticket/Create.html:194
+#: html/Ticket/Elements/EditBasics:80
 msgid "Time Left"
 msgstr "Verbleibende Zeit"
 
-#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65
+#: html/Search/Elements/PickBasics:133
+#: html/Ticket/Create.html:187
+#: html/Ticket/Elements/EditBasics:73
 msgid "Time Worked"
 msgstr "Arbeitszeit"
 
-#: lib/RT/Tickets_Overlay.pm:1619
+#: lib/RT/Tickets_Overlay.pm:1666
 msgid "Time left"
 msgstr "Verbleibende Zeit"
 
-#: html/Elements/Footer:71
+#: html/Elements/Footer:52
 msgid "Time to display"
-msgstr ""
+msgstr "Zeit zum anzeigen"
 
-#: lib/RT/Tickets_Overlay.pm:1594
+#: lib/RT/Tickets_Overlay.pm:1641
 msgid "Time worked"
 msgstr "Gearbeitete Zeit"
 
-#: lib/RT/Ticket_Overlay.pm:1143
+#: lib/RT/Ticket_Overlay.pm:1144
 msgid "TimeWorked"
 msgstr "Arbeitszeit"
 
 #: html/Search/Elements/EditFormat:74
 msgid "Title"
-msgstr ""
+msgstr "Titel"
 
-#: html/Elements/Footer:61
 #. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>')
+#: html/Elements/Footer:68
 msgid "To inquire about support, training, custom development or licensing, please contact %1."
-msgstr ""
+msgstr "Füri Hilfe, Schulung, angepasste Entwicklungen oder Lizensierung, kontaktiere bitte %1."
 
-#: lib/RT/Ticket_Overlay.pm:1146
+#: lib/RT/Ticket_Overlay.pm:1147
 msgid "Told"
 msgstr "Eingegangen"
 
-#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71
+#: html/Admin/Elements/Tabs:68
+#: html/Admin/index.html:88
+#: html/Elements/Tabs:74
+#: html/Tools/index.html:46
+#: html/Tools/index.html:49
 msgid "Tools"
 msgstr "Werkzeuge"
 
+#: html/Search/Elements/Chart:73
+msgid "Total"
+msgstr "Summe"
+
 #: etc/initialdata:252
 msgid "Transaction"
 msgstr "Transaktion"
 
-#: lib/RT/Transaction_Overlay.pm:794
 #. ($self->Data)
+#: lib/RT/Transaction_Overlay.pm:794
 msgid "Transaction %1 purged"
 msgstr "Transaktion %1 eliminiert"
 
@@ -4192,15 +5076,21 @@ msgstr "Benutzerdefinierte Felder bei Transaktionen"
 msgid "Transaction->Create couldn't, as you didn't specify an object type and id"
 msgstr "Transaction->Create fehlgeschlagen, da Objekttyp und ID nicht angegeben wurden"
 
-#: lib/RT/Transaction_Overlay.pm:838
+#: lib/RT/Transaction_Overlay.pm:858
 msgid "Transactions are immutable"
-msgstr "Transaktionen sind unveränderbar"
+msgstr "Transaktionen sind unveränderbar"
 
 #: lib/RT/Date.pm:414
 msgid "Tue."
 msgstr "Di."
 
-#: 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:1144 lib/RT/Tickets_Overlay.pm:1432
+#: 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:1479
 msgid "Type"
 msgstr "Typ"
 
@@ -4212,13 +5102,14 @@ msgstr "Nicht implementiert"
 msgid "Unix login"
 msgstr "Unix Login"
 
-#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847
 #. ($self->ContentEncoding)
 #. ($ContentEncoding)
+#: lib/RT/Attachment_Overlay.pm:290
+#: lib/RT/Record.pm:851
 msgid "Unknown ContentEncoding %1"
 msgstr "Unbekannte Inhaltskodierung (Content-Encoding) %1"
 
-#: html/Search/Build.html:632
+#: html/Search/Build.html:610
 msgid "Unknown field: $key"
 msgstr "Unbekanntes Feld: $key"
 
@@ -4236,63 +5127,73 @@ msgstr "Unprivilegiert"
 
 #: html/Admin/Elements/EditCustomFields:60
 msgid "Unselected Custom Fields"
-msgstr "Nichtausgewähltes benutzerdefiniertes Feld"
+msgstr "Nichtausgewähltes benutzerdefiniertes Feld"
 
 #: html/Admin/CustomFields/Objects.html:61
 msgid "Unselected objects"
-msgstr "Nichtausgewähltes Objekte"
+msgstr "Nichtausgewähltes Objekte"
 
 #: lib/RT/Transaction_Overlay.pm:648
 msgid "Untaken"
-msgstr "Zurückgegeben"
+msgstr "Zurückgegeben"
 
-#: html/Search/Bulk.html:54
+#: html/Elements/RT__Ticket/ColumnMap:299
+#: html/Search/Bulk.html:194
+#: html/Search/Bulk.html:75
 msgid "Update"
 msgstr "Aktualisieren"
 
-#: html/Search/Bulk.html:178
+#: NOT FOUND IN SOURCE
 msgid "Update All"
 msgstr "Alles aktualisieren"
 
-#: html/Ticket/Update.html:133
+#: html/Ticket/Update.html:136
 msgid "Update Ticket"
 msgstr "Anfrage Aktualisieren"
 
-#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70
+#: html/Search/Bulk.html:126
+#: html/Ticket/ModifyAll.html:87
+#: html/Ticket/Update.html:73
 msgid "Update Type"
 msgstr "Aktualisierungtyp"
 
-#: html/Search/Results.html:80
+#: html/Search/Bulk.html:200
+#: html/Search/Results.html:81
 msgid "Update multiple tickets"
 msgstr "Mehrere Anfragen aktualisieren"
 
-#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524
+#: lib/RT/Action/CreateTickets.pm:737
+#: lib/RT/Interface/Web.pm:524
 msgid "Update not recorded."
 msgstr "Aktualisierung nicht gespeichert."
 
-#: html/Search/Bulk.html:99
+#: NOT FOUND IN SOURCE
 msgid "Update selected tickets"
-msgstr "Aktualisiere ausgewählte Anfragen"
+msgstr "Aktualisiere ausgewählte Anfragen"
 
 #: html/Ticket/ModifyAll.html:84
 msgid "Update ticket"
 msgstr "Aktualisiere Anfrage"
 
-#: html/SelfService/Update.html:112 html/SelfService/Update.html:47
 #. ($Ticket->id)
+#: html/SelfService/Update.html:112
+#: html/SelfService/Update.html:47
 msgid "Update ticket #%1"
 msgstr "Aktualisiere Anfrage #%1"
 
-#: html/Ticket/Update.html:156
 #. ($TicketObj->id, $TicketObj->Subject)
+#: html/Ticket/Update.html:159
 msgid "Update ticket #%1 (%2)"
 msgstr "Aktualisiere Anfrage #%1 (%2)"
 
-#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523
+#: lib/RT/Action/CreateTickets.pm:735
+#: lib/RT/Interface/Web.pm:523
 msgid "Update type was neither correspondence nor comment."
 msgstr "Aktualisierungstyp war weder Korrespondenz noch Kommentar."
 
-#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147
+#: html/Elements/SelectDateType:54
+#: html/Ticket/Elements/ShowDates:72
+#: lib/RT/Ticket_Overlay.pm:1148
 msgid "Updated"
 msgstr "Aktualisiert"
 
@@ -4326,18 +5227,19 @@ msgstr "Hochladen von bis zu %1 Bildern"
 
 #: html/Tools/Offline.html:95
 msgid "Upload your changes"
-msgstr "Änderungen hochladen"
+msgstr "Änderungen hochladen"
 
 #: html/Admin/index.html:90
 msgid "Use other RT administrative tools"
-msgstr ""
+msgstr "Benutze andere administrative RT Tools"
 
-#: lib/RT/Ticket_Overlay.pm:496
 #. ($args{'Owner'})
+#: lib/RT/Ticket_Overlay.pm:497
 msgid "User '%1' could not be found."
 msgstr "Benutzer '%1' konnte nicht gefunden werden"
 
-#: etc/initialdata:132 etc/initialdata:206
+#: etc/initialdata:132
+#: etc/initialdata:206
 msgid "User Defined"
 msgstr "Benutzerdefiniert"
 
@@ -4345,19 +5247,21 @@ msgstr "Benutzerdefiniert"
 msgid "User Defined conditions and actions"
 msgstr "Benutzerdefinierte Konditionen und Aktionen"
 
-#: html/Admin/Elements/CustomFieldTabs:72 html/Admin/Elements/GroupTabs:68 html/Admin/Elements/QueueTabs:85 html/Admin/Elements/SystemTabs:68 html/Admin/Global/index.html:80
+#: html/Admin/Elements/CustomFieldTabs:72
+#: html/Admin/Elements/GroupTabs:68
+#: html/Admin/Elements/QueueTabs:85
+#: html/Admin/Elements/SystemTabs:68
+#: html/Admin/Global/index.html:80
 msgid "User Rights"
 msgstr "Benutzerrechte"
 
-#: lib/RT/Interface/Web.pm:1283
-#. ($cf->Name, $class, $Object->id)
+#. ($CustomFieldObj->Name, $class, $Object->id)
+#: lib/RT/Interface/Web.pm:1279
 msgid "User asked for an unknown update type for custom field %1 for %2 object #%3"
-msgstr ""
-"Benutzer hat einen unbekannten Aktualisierungstyp für das benutzerdefinierte "
-"Feld %1 bei %2-Objekt #%3 verlangt"
+msgstr "Benutzer hat einen unbekannten Aktualisierungstyp für das benutzerdefinierte Feld %1 bei %2-Objekt #%3 verlangt"
 
-#: html/Admin/Users/Modify.html:293
 #. ($msg)
+#: html/Admin/Users/Modify.html:292
 msgid "User could not be created: %1"
 msgstr "Benutzer konnte nicht angelegt werden: %1"
 
@@ -4365,11 +5269,15 @@ msgstr "Benutzer konnte nicht angelegt werden: %1"
 msgid "User created"
 msgstr "Benutzer angelegt"
 
-#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90
+#: 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 "Benutzerdefinierte Gruppe"
 
-#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613
+#: lib/RT/User_Overlay.pm:593
+#: lib/RT/User_Overlay.pm:613
 msgid "User loaded"
 msgstr "Benutzer geladen"
 
@@ -4377,11 +5285,21 @@ msgstr "Benutzer geladen"
 msgid "User-defined groups"
 msgstr "Benutzerdefinierte Gruppe"
 
-#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56
+#: html/Admin/Users/Modify.html:69
+#: html/Elements/Login:79
+#: html/Ticket/Elements/AddWatchers:56
 msgid "Username"
 msgstr "Benutzername"
 
-#: html/Admin/Elements/GlobalCustomFieldTabs:55 html/Admin/Elements/SelectNewGroupMembers:47 html/Admin/Elements/Tabs:53 html/Admin/Global/CustomFields/index.html:64 html/Admin/Groups/Members.html:76 html/Admin/Queues/People.html:89 html/Admin/index.html:62 html/User/Groups/Members.html:79 lib/RT/CustomField_Overlay.pm:1086
+#: html/Admin/Elements/GlobalCustomFieldTabs:55
+#: html/Admin/Elements/SelectNewGroupMembers:47
+#: html/Admin/Elements/Tabs:53
+#: html/Admin/Global/CustomFields/index.html:64
+#: html/Admin/Groups/Members.html:76
+#: html/Admin/Queues/People.html:89
+#: html/Admin/index.html:62
+#: html/User/Groups/Members.html:79
+#: lib/RT/CustomField_Overlay.pm:1189
 msgid "Users"
 msgstr "Benutzer"
 
@@ -4389,11 +5307,16 @@ msgstr "Benutzer"
 msgid "Users matching search criteria"
 msgstr "Auf diese Kriterien zutreffende Benutzer"
 
-#: lib/RT/Tickets_Overlay_SQL.pm:523
+#: lib/RT/Tickets_Overlay_SQL.pm:526
 msgid "Valid Query"
-msgstr "Gültige Suche"
+msgstr "Gültige Suche"
 
-#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78
+#: html/Admin/CustomFields/Modify.html:80
+msgid "Validation"
+msgstr "Validierung"
+
+#: html/Admin/CustomFields/Modify.html:104
+#: html/Admin/Elements/EditCustomField:78
 msgid "Values"
 msgstr "Werte"
 
@@ -4415,11 +5338,11 @@ msgstr "Mi."
 
 #: etc/initialdata:521
 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket"
-msgstr ""
+msgstr "Wenn das Ticket freigegeben wurde von allen involvierten Personen, füge die Korrespondenz dem original Ticket hinzu"
 
 #: etc/initialdata:485
 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket"
-msgstr ""
+msgstr "Wenn das Ticket freigegeben wurde von einer involvierten Personen, füge die Korrespondenz dem original Ticket hinzu"
 
 #: etc/initialdata:146
 msgid "When a ticket is created"
@@ -4427,7 +5350,7 @@ msgstr "Wenn eine Anfrage erstellt wird"
 
 #: etc/initialdata:418
 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval"
-msgstr ""
+msgstr "Wenn ein freizugebendes Ticket erstellt wurde, informiere den Besitzer und den AdminCc des Tickets über die anstehende Freigabe"
 
 #: etc/initialdata:151
 msgid "When anything happens"
@@ -4441,9 +5364,10 @@ msgstr "Immer wenn eine Anfrage erledigt wird"
 msgid "Whenever a ticket's owner changes"
 msgstr "Immer wenn der Besitzer einer Anfrage wechselt"
 
-#: etc/initialdata:178 etc/upgrade/3.1.17/content:16
+#: etc/initialdata:178
+#: etc/upgrade/3.1.17/content:16
 msgid "Whenever a ticket's priority changes"
-msgstr "Immer wenn sich die Priorität eines Anfragen ändert"
+msgstr "Immer wenn sich die Priorität eines Anfragen ändert"
 
 #: etc/initialdata:193
 msgid "Whenever a ticket's queue changes"
@@ -4451,7 +5375,7 @@ msgstr "Immer wenn eine Anfrage den Bereich wechselt"
 
 #: etc/initialdata:170
 msgid "Whenever a ticket's status changes"
-msgstr "Immer wenn sich der Status einer Anfrage ändert"
+msgstr "Immer wenn sich der Status einer Anfrage ändert"
 
 #: etc/initialdata:207
 msgid "Whenever a user-defined condition occurs"
@@ -4461,38 +5385,44 @@ msgstr "Immer wenn eine benutzerdefinierte Bedingung auftritt"
 msgid "Whenever comments come in"
 msgstr "Immer wenn ein neuer Kommentar eingeht"
 
-1c7f\r
-itialdata:157
 #: etc/initialdata:157
 msgid "Whenever correspondence comes in"
 msgstr "Immer wenn neue Korrespondenz eingeht"
 
-#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89
+#: html/Admin/Users/Modify.html:188
+#: html/User/Prefs.html:89
 msgid "Work"
 msgstr "Arbeit"
 
-#: html/Search/Results.html:84
+#: html/Search/Results.html:85
 msgid "Work offline"
 msgstr "Offline arbeiten"
 
-#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64
+#: html/Ticket/Elements/ShowBasics:63
+#: html/Ticket/Update.html:64
 msgid "Worked"
-msgstr "Arbeitszeit"
+msgstr "Gearbeitet"
 
-#: lib/RT/Ticket_Overlay.pm:3096
+#: lib/RT/Ticket_Overlay.pm:3079
 msgid "You already own this ticket"
 msgstr "Sie sind bereits Besitzer dieser Anfrage"
 
-#: html/autohandler:158 html/autohandler:166
+#: html/autohandler:176
+#: html/autohandler:184
 msgid "You are not an authorized user"
 msgstr "Sie sind kein autorisierter Benutzer"
 
-#: lib/RT/Ticket_Overlay.pm:2978
+#: html/Prefs/Search.html:56
+msgid "You can also edit the predefined search itself"
+msgstr "Du kannst die vordefinierte Such auch selbst editieren"
+
+#: lib/RT/Ticket_Overlay.pm:2961
 msgid "You can only reassign tickets that you own or that are unowned"
-msgstr "Sie können nur Anfragen ohne Besitzer zuweisen"
+msgstr "Sie können nur Anfragen ohne Besitzer zuweisen"
 
-#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780
 #. ($num, $queue)
+#: docs/design_docs/string-extraction-guide.txt:47
+#: lib/RT/StyleGuide.pod:780
 msgid "You found %1 tickets in queue %2"
 msgstr "Sie haben %1 Anfragen im Bereich %2 gefunden"
 
@@ -4504,19 +5434,17 @@ msgstr "Sie wurden von RT abgemeldet."
 msgid "You have no permission to create tickets in that queue."
 msgstr "Sie haben kein Recht, Anfragen in diesem Bereich anzulegen."
 
-#: lib/RT/Ticket_Overlay.pm:1964
+#: lib/RT/Ticket_Overlay.pm:1965
 msgid "You may not create requests in that queue."
-msgstr "Sie dürfen in diesem Bereich keine Anfragen erstellen"
+msgstr "Sie dürfen in diesem Bereich keine Anfragen erstellen"
 
 #: html/NoAuth/Logout.html:56
 msgid "You're welcome to login again"
-msgstr "Sie können sich gerne wieder anmelden"
+msgstr "Sie können sich gerne wieder anmelden"
 
 #: etc/initialdata:502
 msgid "Your request has been approved by %1. Other approvals may still be pending."
-msgstr ""
-"Ihre Anfrage wurde von %1 freigegeben. Andere Freigaben können noch "
-"ausstehen."
+msgstr "Ihre Anfrage wurde von %1 freigegeben. Andere Freigaben können noch ausstehen."
 
 #: etc/initialdata:540
 msgid "Your request has been approved."
@@ -4526,11 +5454,12 @@ msgstr "Ihre Anfrage wurde freigegeben."
 msgid "Your request was rejected."
 msgstr "Ihre Anfrage wurde abgewiesen"
 
-#: html/autohandler:193
+#: html/autohandler:211
 msgid "Your username or password is incorrect"
 msgstr "Ihr Benutzername oder Passwort ist falsch"
 
-#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149
+#: html/Admin/Users/Modify.html:168
+#: html/User/Prefs.html:149
 msgid "Zip"
 msgstr "PLZ"
 
@@ -4542,80 +5471,96 @@ msgstr "Erlaube Erstellung von gespeicherten Suchabfragen"
 msgid "allow loading of saved searches"
 msgstr "Erlaube das Laden von gespeicherten Suchabfragen"
 
-#: html/User/Elements/DelegateRights:80
 #. ($right->PrincipalObj->Object->SelfDescription)
+#: html/User/Elements/DelegateRights:80
 msgid "as granted to %1"
-msgstr "wie an %1 gewährt"
+msgstr "wie an %1 gewährt"
 
-#: html/Search/Elements/PickBasics:127
+#: NOT FOUND IN SOURCE
 msgid "belongs to"
-msgstr "gehört zu"
+msgstr "gehört zu"
+
+#: html/Search/Results.html:86
+msgid "chart"
+msgstr "Diagramm"
 
 #: html/SelfService/Closed.html:49
 msgid "closed"
 msgstr "geschlossen"
 
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55
+#: html/Elements/SelectCustomFieldOperator:59
+#: html/Elements/SelectMatch:55
 msgid "contains"
-msgstr "enthält"
+msgstr "enthält"
 
-#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342
+#: html/Admin/Queues/Modify.html:98
+#: lib/RT/Date.pm:342
 msgid "days"
 msgstr "Tage"
 
 #: lib/RT/Queue_Overlay.pm:88
 msgid "deleted"
-msgstr "gelöscht"
+msgstr "gelöscht"
 
-#: html/Search/Elements/PickBasics:128
+#: NOT FOUND IN SOURCE
 msgid "does not belong to"
-msgstr "gehört nicht zu"
+msgstr "gehört nicht zu"
 
 #: html/Search/Elements/PickBasics:61
 msgid "does not match"
-msgstr "enthält nicht"
+msgstr "enthält nicht"
 
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56
+#: html/Elements/SelectCustomFieldOperator:59
+#: html/Elements/SelectMatch:56
 msgid "doesn't contain"
-msgstr "enthält nicht"
+msgstr "enthält nicht"
 
 #: html/Elements/SelectEqualityOperator:59
 msgid "equal to"
 msgstr "gleich"
 
-#: html/Search/Build.html:387
+#: html/Search/Build.html:365
 msgid "error: can't move down"
 msgstr "Fehler: Kann nicht hinunter bewegen"
 
-#: html/Search/Build.html:409
+#: html/Search/Build.html:387
 msgid "error: can't move left"
 msgstr "Fehler: Kann nicht nach links bewegen"
 
-#: html/Search/Build.html:368
+#: html/Search/Build.html:346
 msgid "error: can't move up"
 msgstr "Fehler: Kann nicht hinauf bewegen"
 
-#: html/Search/Build.html:451
+#: html/Search/Build.html:429
 msgid "error: nothing to delete"
-msgstr "Fehler: Nichts zu löschen"
+msgstr "Fehler: Nichts zu löschen"
 
-#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443
+#: html/Search/Build.html:351
+#: html/Search/Build.html:370
+#: html/Search/Build.html:392
+#: html/Search/Build.html:421
 msgid "error: nothing to move"
 msgstr "Fehler: Nichts zu bewegen"
 
-#: html/Search/Build.html:469
+#: html/Search/Build.html:447
 msgid "error: nothing to toggle"
 msgstr "Fehler: Nichts zum Umschalten"
 
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: html/Elements/SelectCustomFieldOperator:59
+#: html/Elements/SelectEqualityOperator:59
 msgid "greater than"
-msgstr "größer als"
+msgstr "größer als"
 
-#: lib/RT/Group_Overlay.pm:222
 #. ($self->Name)
+#: lib/RT/Group_Overlay.pm:222
 msgid "group '%1'"
 msgstr "Gruppe '%1'"
 
+#. ($m->scomp('Elements/SelectGroupBy', Name => 'PrimaryGroupBy'))
+#: html/Search/Results.html:92
+msgid "grouped by %1"
+msgstr "sortiert nach %1"
+
 #: lib/RT/Date.pm:338
 msgid "hours"
 msgstr "Stunden"
@@ -4624,27 +5569,40 @@ msgstr "Stunden"
 msgid "id"
 msgstr "ID"
 
-#: html/Elements/SelectBoolean:53 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:57 html/Search/Elements/PickBasics:175 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:162
+#: html/Search/Elements/PickBasics:74
+#: html/Search/Elements/PickBasics:90
+#: html/Search/Elements/PickCFs:53
 msgid "is"
 msgstr "ist"
 
-#: html/Elements/SelectBoolean:57 html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:58 html/Search/Elements/PickBasics:176 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:163
+#: html/Search/Elements/PickBasics:75
+#: html/Search/Elements/PickBasics:91
+#: html/Search/Elements/PickCFs:54
 msgid "isn't"
 msgstr "ist nicht"
 
-#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59
+#: html/Elements/SelectCustomFieldOperator:59
+#: html/Elements/SelectEqualityOperator:59
 msgid "less than"
 msgstr "kleiner als"
 
 #: html/Search/Elements/PickBasics:60
 msgid "matches"
-msgstr "enthält"
+msgstr "enthält"
 
 #: lib/RT/Date.pm:334
 msgid "min"
 msgstr "Min"
 
-#: html/Ticket/Update.html:64
+#: NOT FOUND IN SOURCE
 msgid "minutes"
 msgstr "Minuten"
 
@@ -4656,7 +5614,8 @@ msgstr "Monate"
 msgid "new"
 msgstr "neu"
 
-#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63
+#: html/Admin/Elements/PickCustomFields:64
+#: html/Admin/Elements/PickObjects:65
 msgid "no name"
 msgstr "kein Name"
 
@@ -4664,7 +5623,8 @@ msgstr "kein Name"
 msgid "no value"
 msgstr "kein Wert"
 
-#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49
+#: html/Admin/Elements/EditQueueWatchers:48
+#: html/Ticket/Elements/EditWatchers:49
 msgid "none"
 msgstr "keine"
 
@@ -4672,17 +5632,18 @@ msgstr "keine"
 msgid "not equal to"
 msgstr "ungleich"
 
-#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84
+#: html/SelfService/Elements/MyRequests:82
+#: lib/RT/Queue_Overlay.pm:84
 msgid "open"
 msgstr "offen"
 
-#: lib/RT/Group_Overlay.pm:227
 #. ($self->Name, $user->Name)
+#: lib/RT/Group_Overlay.pm:227
 msgid "personal group '%1' for user '%2'"
-msgstr "persönliche Gruppe '%1' für Benutzer '%2'"
+msgstr "persönliche Gruppe '%1' für Benutzer '%2'"
 
-#: lib/RT/Group_Overlay.pm:235
 #. ($queue->Name, $self->Type)
+#: lib/RT/Group_Overlay.pm:235
 msgid "queue %1 %2"
 msgstr "Bereich %1 %2"
 
@@ -4700,42 +5661,52 @@ msgstr "Sek"
 
 #: lib/RT/System.pm:86
 msgid "show Configuration tab"
-msgstr "Zeige Konfigurationsmenü"
+msgstr "Zeige Konfigurationsmenü"
 
-#: html/Search/Results.html:82
+#: html/Search/Results.html:83
 msgid "spreadsheet"
 msgstr "Tabellenkalkulation"
 
 #: lib/RT/Queue_Overlay.pm:85
 msgid "stalled"
-msgstr "zurückgestellt"
+msgstr "zurückgestellt"
+
+#. ($m->scomp('Elements/SelectChartType', Name => 'ChartStyle'))
+#: html/Search/Results.html:93
+msgid "style: %1"
+msgstr "Darstellung: %1"
+
+#: html/Prefs/MyRT.html:80
+msgid "summary rows"
+msgstr "Ergebnisreihen"
 
-#: lib/RT/Group_Overlay.pm:230
 #. ($self->Type)
+#: lib/RT/Group_Overlay.pm:230
 msgid "system %1"
 msgstr "System %1"
 
-#: lib/RT/Group_Overlay.pm:241
 #. ($self->Type)
+#: lib/RT/Group_Overlay.pm:241
 msgid "system group '%1'"
 msgstr "Systemgruppe '%1'"
 
-#: html/Elements/Error:66 html/SelfService/Error.html:63
+#: html/Elements/Error:64
+#: html/SelfService/Error.html:63
 msgid "the calling component did not specify why"
 msgstr "die aufrufende Komponente gab nicht an warum"
 
-#: lib/RT/Group_Overlay.pm:238
 #. ($self->Instance, $self->Type)
+#: lib/RT/Group_Overlay.pm:238
 msgid "ticket #%1 %2"
 msgstr "Anfrage #%1 %2"
 
-#: lib/RT/Group_Overlay.pm:244
 #. ($self->Id)
+#: lib/RT/Group_Overlay.pm:244
 msgid "undescribed group %1"
 msgstr "unbeschriebene Gruppe %1"
 
-#: lib/RT/Group_Overlay.pm:219
 #. ($user->Object->Name)
+#: lib/RT/Group_Overlay.pm:219
 msgid "user %1"
 msgstr "Benutzer %1"
 
index cf172b1..13df765 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: pt_br.po,v 1.1.1.5 2006-10-17 08:50:11 ivan Exp $
+# $Id: pt_br.po,v 1.1.1.5.2.1 2008-03-03 23:07:47 ivan Exp $
 msgid ""
 msgstr ""
 "Project-Id-Version: RT 3.4.x\n"
index 8c93295..8ed0ffd 100644 (file)
@@ -55,7 +55,7 @@ BEGIN {
     use vars qw ($VERSION  @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
     
     # set the version for version checking
-    $VERSION = do { my @r = (q$Revision: 1.1.1.3 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
+    $VERSION = do { my @r = (q$Revision: 1.1.1.3.4.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
     
     @ISA         = qw(Exporter);
     
index efc4c26..de125f5 100755 (executable)
@@ -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@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 }}}
 package RT::Interface::Email;
 
@@ -50,31 +50,32 @@ use Mail::Address;
 use MIME::Entity;
 use RT::EmailParser;
 use File::Temp;
+use UNIVERSAL::require;
 
 BEGIN {
     use Exporter ();
-    use vars qw ($VERSION  @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
-    
+    use vars qw ( @ISA @EXPORT_OK);
+
     # set the version for version checking
-    $VERSION = do { my @r = (q$Revision: 1.1.1.6 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker
-    
-    @ISA         = qw(Exporter);
-    
+    our $VERSION = 2.0;
+
+    @ISA = qw(Exporter);
+
     # your exported package globals go here,
     # as well as any optionally exported functions
-    @EXPORT_OK   = qw(
-              &CreateUser
-              &GetMessageContent
-              &CheckForLoops 
-              &CheckForSuspiciousSender
-              &CheckForAutoGenerated 
-              &CheckForBounce 
-              &MailError 
-              &ParseCcAddressesFromHead
-              &ParseSenderAddressFromHead 
-              &ParseErrorsToAddressFromHead
-              &ParseAddressFromHeader
-              &Gateway);
+    @EXPORT_OK = qw(
+        &CreateUser
+        &GetMessageContent
+        &CheckForLoops
+        &CheckForSuspiciousSender
+        &CheckForAutoGenerated
+        &CheckForBounce
+        &MailError
+        &ParseCcAddressesFromHead
+        &ParseSenderAddressFromHead
+        &ParseErrorsToAddressFromHead
+        &ParseAddressFromHeader
+        &Gateway);
 
 }
 
@@ -103,19 +104,18 @@ ok(require RT::Interface::Email);
 
 =cut
 
+# {{{ sub CheckForLoops
 
-# {{{ sub CheckForLoops 
-
-sub CheckForLoops  {
+sub CheckForLoops {
     my $head = shift;
-    
+
     #If this instance of RT sent it our, we don't want to take it in
     my $RTLoop = $head->get("X-RT-Loop-Prevention") || "";
-    chomp ($RTLoop); #remove that newline
-    if ($RTLoop eq "$RT::rtname") {
-       return (1);
+    chomp($RTLoop);    #remove that newline
+    if ( $RTLoop eq "$RT::rtname" ) {
+        return (1);
     }
-    
+
     # TODO: We might not trap the case where RT instance A sends a mail
     # to RT instance B which sends a mail to ...
     return (undef);
@@ -129,23 +129,24 @@ sub CheckForSuspiciousSender {
     my $head = shift;
 
     #if it's from a postmaster or mailer daemon, it's likely a bounce.
-    
+
     #TODO: better algorithms needed here - there is no standards for
     #bounces, so it's very difficult to separate them from anything
     #else.  At the other hand, the Return-To address is only ment to be
     #used as an error channel, we might want to put up a separate
     #Return-To address which is treated differently.
-    
+
     #TODO: search through the whole email and find the right Ticket ID.
 
-    my ($From, $junk) = ParseSenderAddressFromHead($head);
-    
-    if (($From =~ /^mailer-daemon\@/i) or
-       ($From =~ /^postmaster\@/i)){
-       return (1);
-       
+    my ( $From, $junk ) = ParseSenderAddressFromHead($head);
+
+    if (   ( $From =~ /^mailer-daemon\@/i )
+        or ( $From =~ /^postmaster\@/i ) )
+    {
+        return (1);
+
     }
-    
+
     return (undef);
 
 }
@@ -155,15 +156,15 @@ sub CheckForSuspiciousSender {
 # {{{ sub CheckForAutoGenerated
 sub CheckForAutoGenerated {
     my $head = shift;
-    
-    my $Precedence = $head->get("Precedence") || "" ;
-    if ($Precedence =~ /^(bulk|junk)/i) {
-       return (1);
+
+    my $Precedence = $head->get("Precedence") || "";
+    if ( $Precedence =~ /^(bulk|junk)/i ) {
+        return (1);
     }
-    
+
     # First Class mailer uses this as a clue.
     my $FCJunk = $head->get("X-FC-Machinegenerated") || "";
-    if ($FCJunk =~ /^true/i) {
+    if ( $FCJunk =~ /^true/i ) {
         return (1);
     }
 
@@ -175,9 +176,9 @@ sub CheckForAutoGenerated {
 # {{{ sub CheckForBounce
 sub CheckForBounce {
     my $head = shift;
-   
-    my $ReturnPath = $head->get("Return-path") || "" ;
-    return ($ReturnPath =~ /<>/);
+
+    my $ReturnPath = $head->get("Return-path") || "";
+    return ( $ReturnPath =~ /<>/ );
 }
 
 # }}}
@@ -195,11 +196,12 @@ Returns false, otherwise.
 sub IsRTAddress {
     my $address = shift || '';
 
-    # Example: the following rule would tell RT not to Cc 
+    # Example: the following rule would tell RT not to Cc
     #   "tickets@noc.example.com"
-    if ( defined($RT::RTAddressRegexp) &&
-                       $address =~ /$RT::RTAddressRegexp/i ) {
-        return(1);
+    if ( defined($RT::RTAddressRegexp)
+        && $address =~ /$RT::RTAddressRegexp/i )
+    {
+        return (1);
     } else {
         return (undef);
     }
@@ -217,56 +219,61 @@ Returns the same array with any IsRTAddress()es weeded out.
 =cut
 
 sub CullRTAddresses {
-    return (grep { IsRTAddress($_) } @_);
+    return ( grep { IsRTAddress($_) } @_ );
 }
 
 # }}}
 
-# {{{ sub MailError 
+# {{{ sub MailError
 sub MailError {
-    my %args = (To => $RT::OwnerEmail,
-               Bcc => undef,
-               From => $RT::CorrespondAddress,
-               Subject => 'There has been an error',
-               Explanation => 'Unexplained error',
-               MIMEObj => undef,
-        Attach => undef,
-               LogLevel => 'crit',
-               @_);
-
-
-    $RT::Logger->log(level => $args{'LogLevel'}, 
-                    message => $args{'Explanation'}
-                   );
-    my $entity = MIME::Entity->build( Type  =>"multipart/mixed",
-                                     From => $args{'From'},
-                                     Bcc => $args{'Bcc'},
-                                     To => $args{'To'},
-                                     Subject => $args{'Subject'},
-                                     Precedence => 'bulk',
-                                     'X-RT-Loop-Prevention' => $RT::rtname,
-                                   );
-
-    $entity->attach(  Data => $args{'Explanation'}."\n");
-    
+    my %args = (
+        To          => $RT::OwnerEmail,
+        Bcc         => undef,
+        From        => $RT::CorrespondAddress,
+        Subject     => 'There has been an error',
+        Explanation => 'Unexplained error',
+        MIMEObj     => undef,
+        Attach      => undef,
+        LogLevel    => 'crit',
+        @_
+    );
+
+    $RT::Logger->log(
+        level   => $args{'LogLevel'},
+        message => $args{'Explanation'}
+    );
+    my $entity = MIME::Entity->build(
+        Type                   => "multipart/mixed",
+        From                   => $args{'From'},
+        Bcc                    => $args{'Bcc'},
+        To                     => $args{'To'},
+        Subject                => $args{'Subject'},
+        Precedence             => 'bulk',
+        'X-RT-Loop-Prevention' => $RT::rtname,
+    );
+
+    $entity->attach( Data => $args{'Explanation'} . "\n" );
+
     my $mimeobj = $args{'MIMEObj'};
     if ($mimeobj) {
         $mimeobj->sync_headers();
         $entity->add_part($mimeobj);
     }
-   
-    if ($args{'Attach'}) {
-        $entity->attach(Data => $args{'Attach'}, Type => 'message/rfc822');
+
+    if ( $args{'Attach'} ) {
+        $entity->attach( Data => $args{'Attach'}, Type => 'message/rfc822' );
 
     }
 
-    if ($RT::MailCommand eq 'sendmailpipe') {
-        open (MAIL, "|$RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments") || return(0);
+    if ( $RT::MailCommand eq 'sendmailpipe' ) {
+        open( MAIL,
+            "|$RT::SendmailPath $RT::SendmailBounceArguments $RT::SendmailArguments"
+            )
+            || return (0);
         print MAIL $entity->as_string;
         close(MAIL);
-    }
-    else {
-       $entity->send($RT::MailCommand, $RT::MailParams);
+    } else {
+        $entity->send( $RT::MailCommand, $RT::MailParams );
     }
 }
 
@@ -275,37 +282,39 @@ sub MailError {
 # {{{ Create User
 
 sub CreateUser {
-    my ($Username, $Address, $Name, $ErrorsTo, $entity) = @_;
+    my ( $Username, $Address, $Name, $ErrorsTo, $entity ) = @_;
     my $NewUser = RT::User->new($RT::SystemUser);
 
-    my ($Val, $Message) = 
-      $NewUser->Create(Name => ($Username || $Address),
-                       EmailAddress => $Address,
-                       RealName => $Name,
-                       Password => undef,
-                       Privileged => 0,
-                       Comments => 'Autocreated on ticket submission'
-                      );
-    
+    my ( $Val, $Message ) = $NewUser->Create(
+        Name => ( $Username || $Address ),
+        EmailAddress => $Address,
+        RealName     => $Name,
+        Password     => undef,
+        Privileged   => 0,
+        Comments     => 'Autocreated on ticket submission'
+    );
+
     unless ($Val) {
-        
+
         # Deal with the race condition of two account creations at once
         #
         if ($Username) {
             $NewUser->LoadByName($Username);
         }
-        
-        unless ($NewUser->Id) {
+
+        unless ( $NewUser->Id ) {
             $NewUser->LoadByEmail($Address);
         }
-        
-        unless ($NewUser->Id) {  
-            MailError( To => $ErrorsTo,
-                       Subject => "User could not be created",
-                       Explanation => "User creation failed in mailgateway: $Message",
-                       MIMEObj => $entity,
-                       LogLevel => 'crit'
-                     );
+
+        unless ( $NewUser->Id ) {
+            MailError(
+                To          => $ErrorsTo,
+                Subject     => "User could not be created",
+                Explanation =>
+                    "User creation failed in mailgateway: $Message",
+                MIMEObj  => $entity,
+                LogLevel => 'crit'
+            );
         }
     }
 
@@ -313,21 +322,25 @@ sub CreateUser {
     my $CurrentUser = RT::CurrentUser->new();
     $CurrentUser->LoadByEmail($Address);
 
-    unless ($CurrentUser->id) {
-            $RT::Logger->warning("Couldn't load user '$Address'.".  "giving up");
-                MailError( To => $ErrorsTo,
-                           Subject => "User could not be loaded",
-                           Explanation => "User  '$Address' could not be loaded in the mail gateway",
-                           MIMEObj => $entity,
-                           LogLevel => 'crit'
-                     );
+    unless ( $CurrentUser->id ) {
+        $RT::Logger->warning(
+            "Couldn't load user '$Address'." . "giving up" );
+        MailError(
+            To          => $ErrorsTo,
+            Subject     => "User could not be loaded",
+            Explanation =>
+                "User  '$Address' could not be loaded in the mail gateway",
+            MIMEObj  => $entity,
+            LogLevel => 'crit'
+        );
     }
 
     return $CurrentUser;
 }
+
 # }}}
 
-# {{{ ParseCcAddressesFromHead 
+# {{{ ParseCcAddressesFromHead
 
 =head2 ParseCcAddressesFromHead HASHREF
 
@@ -337,32 +350,34 @@ headers b<except> the current Queue\'s email addresses, the CurrentUser\'s
 email address  and anything that the configuration sub RT::IsRTAddress matches.
 
 =cut
-  
+
 sub ParseCcAddressesFromHead {
-    my %args = ( Head => undef,
-                QueueObj => undef,
-                CurrentUser => undef,
-                @_ );
-    
+    my %args = (
+        Head        => undef,
+        QueueObj    => undef,
+        CurrentUser => undef,
+        @_
+    );
+
     my (@Addresses);
-        
-    my @ToObjs = Mail::Address->parse($args{'Head'}->get('To'));
-    my @CcObjs = Mail::Address->parse($args{'Head'}->get('Cc'));
-    
-    foreach my $AddrObj (@ToObjs, @CcObjs) {
-       my $Address = $AddrObj->address;
-       $Address = $args{'CurrentUser'}->UserObj->CanonicalizeEmailAddress($Address);
-       next if ($args{'CurrentUser'}->EmailAddress =~ /^\Q$Address\E$/i);
-       next if ($args{'QueueObj'}->CorrespondAddress =~ /^\Q$Address\E$/i);
-       next if ($args{'QueueObj'}->CommentAddress =~ /^\Q$Address\E$/i);
-       next if (RT::EmailParser->IsRTAddress($Address));
-       
-       push (@Addresses, $Address);
+
+    my @ToObjs = Mail::Address->parse( $args{'Head'}->get('To') );
+    my @CcObjs = Mail::Address->parse( $args{'Head'}->get('Cc') );
+
+    foreach my $AddrObj ( @ToObjs, @CcObjs ) {
+        my $Address = $AddrObj->address;
+        $Address = $args{'CurrentUser'}
+            ->UserObj->CanonicalizeEmailAddress($Address);
+        next if ( $args{'CurrentUser'}->EmailAddress   =~ /^\Q$Address\E$/i );
+        next if ( $args{'QueueObj'}->CorrespondAddress =~ /^\Q$Address\E$/i );
+        next if ( $args{'QueueObj'}->CommentAddress    =~ /^\Q$Address\E$/i );
+        next if ( RT::EmailParser->IsRTAddress($Address) );
+
+        push( @Addresses, $Address );
     }
     return (@Addresses);
 }
 
-
 # }}}
 
 # {{{ ParseSenderAdddressFromHead
@@ -376,12 +391,14 @@ of the From (evaluated in order of Reply-To:, From:, Sender)
 
 sub ParseSenderAddressFromHead {
     my $head = shift;
+
     #Figure out who's sending this message.
-    my $From = $head->get('Reply-To') || 
-      $head->get('From') || 
-       $head->get('Sender');
-    return (ParseAddressFromHeader($From));
+    my $From = $head->get('Reply-To')
+        || $head->get('From')
+        || $head->get('Sender');
+    return ( ParseAddressFromHeader($From) );
 }
+
 # }}}
 
 # {{{ ParseErrorsToAdddressFromHead
@@ -396,18 +413,22 @@ From:, Sender)
 
 sub ParseErrorsToAddressFromHead {
     my $head = shift;
+
     #Figure out who's sending this message.
 
-    foreach my $header ('Return-path', 'Errors-To' , 'Reply-To', 'From', 'Sender' ) {
-       # If there's a header of that name
-       my $headerobj = $head->get($header);
-       if ($headerobj) {
-               my ($addr, $name ) = ParseAddressFromHeader($headerobj);
-               # If it's got actual useful content...
-               return ($addr) if ($addr);
-       }
+    foreach my $header ( 'Errors-To', 'Reply-To', 'From', 'Sender' ) {
+
+        # If there's a header of that name
+        my $headerobj = $head->get($header);
+        if ($headerobj) {
+            my ( $addr, $name ) = ParseAddressFromHeader($headerobj);
+
+            # If it's got actual useful content...
+            return ($addr) if ($addr);
+        }
     }
 }
+
 # }}}
 
 # {{{ ParseAddressFromHeader
@@ -418,31 +439,28 @@ Takes an address from $head->get('Line') and returns a tuple: user@host, friendl
 
 =cut
 
-
-sub ParseAddressFromHeader{
+sub ParseAddressFromHeader {
     my $Addr = shift;
-    
-    # Perl 5.8.0 breaks when doing regex matches on utf8
-    Encode::_utf8_off($Addr) if $] == 5.008;
+
     my @Addresses = Mail::Address->parse($Addr);
-    
+
     my $AddrObj = $Addresses[0];
 
-    unless (ref($AddrObj)) {
-       return(undef,undef);
+    unless ( ref($AddrObj) ) {
+        return ( undef, undef );
     }
-    my $Name =  ($AddrObj->phrase || $AddrObj->comment || $AddrObj->address);
-    
+
+    my $Name = ( $AddrObj->phrase || $AddrObj->comment || $AddrObj->address );
+
     #Lets take the from and load a user object.
     my $Address = $AddrObj->address;
 
-    return ($Address, $Name);
+    return ( $Address, $Name );
 }
-# }}}
 
-# {{{ sub ParseTicketId 
+# }}}
 
+# {{{ sub ParseTicketId
 
 sub ParseTicketId {
     my $Subject = shift;
@@ -454,15 +472,13 @@ sub ParseTicketId {
         my $id = $1;
         $RT::Logger->debug("Found a ticket ID. It's $id");
         return ($id);
-    }
-    else {
+    } else {
         return (undef);
     }
 }
 
 # }}}
 
-
 =head2 Gateway ARGSREF
 
 
@@ -501,50 +517,53 @@ Returns:
 
 sub Gateway {
     my $argsref = shift;
+    my %args    = (
+        action  => 'correspond',
+        queue   => '1',
+        ticket  => undef,
+        message => undef,
+        %$argsref
+    );
 
-    my %args = %$argsref;
-
-    # Set some reasonable defaults
-    $args{'action'} ||= 'correspond';
-    $args{'queue'}  ||= '1';
+    my $SystemTicket;
+    my $Right;
 
     # Validate the action
-    my ($status, @actions) = IsCorrectAction( $args{'action'} );
-    unless ( $status ) {
-
-        # Can't safely loc this. What object do we loc around?
-        $RT::Logger->crit("Mail gateway called with an invalid action paramenter '".$actions[0]."' for queue '".$args{'queue'}."'");
-
-        return ( -75, "Invalid 'action' parameter", undef );
+    my ( $status, @actions ) = IsCorrectAction( $args{'action'} );
+    unless ($status) {
+        return (
+            -75,
+            "Invalid 'action' parameter "
+                . $actions[0]
+                . " for queue "
+                . $args{'queue'},
+            undef
+        );
     }
 
     my $parser = RT::EmailParser->new();
+    $parser->SmartParseMIMEEntityFromScalar( Message => $args{'message'} );
+    my $Message = $parser->Entity();
 
-    $parser->SmartParseMIMEEntityFromScalar( Message => $args{'message'});
-
-    if (!$parser->Entity()) {
+    unless ($Message) {
         MailError(
             To          => $RT::OwnerEmail,
             Subject     => "RT Bounce: Unparseable message",
             Explanation => "RT couldn't process the message below",
-            Attach     => $args{'message'}
+            Attach      => $args{'message'}
         );
 
-        return(0,"Failed to parse this message. Something is likely badly wrong with the message");
+        return ( 0,
+            "Failed to parse this message. Something is likely badly wrong with the message"
+        );
     }
 
-    my $Message = $parser->Entity();
-    my $head    = $Message->head;
-
-    my ( $CurrentUser, $AuthStat, $error );
-
-    # Initalize AuthStat so comparisons work correctly
-    $AuthStat = -9999999;
+    my $head = $Message->head;
 
     my $ErrorsTo = ParseErrorsToAddressFromHead($head);
 
     my $MessageId = $head->get('Message-ID')
-      || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>";
+        || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>";
 
     #Pull apart the subject line
     my $Subject = $head->get('Subject') || '';
@@ -552,13 +571,12 @@ sub Gateway {
 
     $args{'ticket'} ||= ParseTicketId($Subject);
 
-    my $SystemTicket;
-    my $Right = 'CreateTicket';
-    if ( $args{'ticket'} ) {
-        $SystemTicket = RT::Ticket->new($RT::SystemUser);
-        $SystemTicket->Load( $args{'ticket'} );
-       # if there's an existing ticket, this must be a reply
-       $Right = 'ReplyToTicket';
+    $SystemTicket = RT::Ticket->new($RT::SystemUser);
+    $SystemTicket->Load( $args{'ticket'} ) if ( $args{'ticket'} ) ;
+    if ( $SystemTicket->id ) {
+        $Right = 'ReplyToTicket';
+    } else {
+        $Right = 'CreateTicket';
     }
 
     #Set up a queue object
@@ -566,190 +584,124 @@ sub Gateway {
     $SystemQueueObj->Load( $args{'queue'} );
 
     # We can safely have no queue of we have a known-good ticket
-    unless ( $args{'ticket'} || $SystemQueueObj->id ) {
+    unless ( $SystemTicket->id || $SystemQueueObj->id ) {
         return ( -75, "RT couldn't find the queue: " . $args{'queue'}, undef );
     }
 
-    # Authentication Level
+    # Authentication Level ($AuthStat)
     # -1 - Get out.  this user has been explicitly declined
     # 0 - User may not do anything (Not used at the moment)
     # 1 - Normal user
     # 2 - User is allowed to specify status updates etc. a la enhanced-mailgate
+    my ( $CurrentUser, $AuthStat, $error );
+
+    # Initalize AuthStat so comparisons work correctly
+    $AuthStat = -9999999;
 
     push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins;
 
-    # Since this needs loading, no matter what
+    # if plugin returns AuthStat -2 we skip action
+    # NOTE: this is experimental API and it would be changed
+    my %skip_action = ();
 
+    # Since this needs loading, no matter what
     foreach (@RT::MailPlugins) {
-        my $Code;
-        my $NewAuthStat;
+        my ($Code, $NewAuthStat);
         if ( ref($_) eq "CODE" ) {
             $Code = $_;
-        }
-        else {
-            $_ = "RT::Interface::Email::".$_ unless $_ =~ /^RT::Interface::Email::/;
-            eval "require $_;";
-            if ($@) {
-                $RT::Logger->crit("Couldn't load module '$_': $@");
-                next;
-            }
+        } else {
+            my $Class = $_;
+            $Class = "RT::Interface::Email::" . $Class
+                unless $Class =~ /^RT::Interface::Email::/;
+            $Class->require or
+                do { $RT::Logger->error("Couldn't load $Class: $@"); next };
+
             no strict 'refs';
-            if ( !defined( $Code = *{ $_ . "::GetCurrentUser" }{CODE} ) ) {
-                $RT::Logger->crit("No GetCurrentUser code found in $_ module");
+            unless ( defined( $Code = *{ $Class . "::GetCurrentUser" }{CODE} ) ) {
+                $RT::Logger->crit( "No 'GetCurrentUser' function found in '$Class' module");
                 next;
             }
         }
 
-       foreach my $action ( @actions ) {
-
+        foreach my $action (@actions) {
             ( $CurrentUser, $NewAuthStat ) = $Code->(
-                Message     => $Message,
+                Message       => $Message,
                 RawMessageRef => \$args{'message'},
-                CurrentUser => $CurrentUser,
-                AuthLevel   => $AuthStat,
-                Action      => $action,
-                Ticket      => $SystemTicket,
-                Queue       => $SystemQueueObj
+                CurrentUser   => $CurrentUser,
+                AuthLevel     => $AuthStat,
+                Action        => $action,
+                Ticket        => $SystemTicket,
+                Queue         => $SystemQueueObj
             );
 
-
-            # If a module returns a "-1" then we discard the ticket, so.
-            $AuthStat = -1 if $NewAuthStat == -1;
-
-            # You get the highest level of authentication you were assigned.
-            $AuthStat = $NewAuthStat if $NewAuthStat > $AuthStat;
+# You get the highest level of authentication you were assigned, unless you get the magic -1
+# If a module returns a "-1" then we discard the ticket, so.
+            $AuthStat = $NewAuthStat
+                if ( $NewAuthStat > $AuthStat or $NewAuthStat == -1 or $NewAuthStat == -2 );
 
             last if $AuthStat == -1;
-       }
+            $skip_action{$action}++ if $AuthStat == -2;
+        }
 
         last if $AuthStat == -1;
     }
-
     # {{{ If authentication fails and no new user was created, get out.
-    if ( !$CurrentUser or !$CurrentUser->Id or $AuthStat == -1 ) {
+    if ( !$CurrentUser || !$CurrentUser->id || $AuthStat == -1 ) {
 
         # If the plugins refused to create one, they lose.
         unless ( $AuthStat == -1 ) {
-
-            # Notify the RT Admin of the failure.
-            # XXX Should this be configurable?
-            MailError(
-                To          => $RT::OwnerEmail,
-                Subject     => "Could not load a valid user",
-                Explanation => <<EOT,
-RT could not load a valid user, and RT's configuration does not allow
-for the creation of a new user for this email ($ErrorsTo).
-
-You might need to grant 'Everyone' the right '$Right' for the
-queue @{[$args{'queue'}]}.
-
-EOT
-                MIMEObj  => $Message,
-                LogLevel => 'error'
+            _NoAuthorizedUserFound(
+                Right     => $Right,
+                Message   => $Message,
+                Requestor => $ErrorsTo,
+                Queue     => $args{'queue'}
             );
 
-            # Also notify the requestor that his request has been dropped.
-            MailError(
-                To          => $ErrorsTo,
-                Subject     => "Could not load a valid user",
-                Explanation => <<EOT,
-RT could not load a valid user, and RT's configuration does not allow
-for the creation of a new user for your email.
-
-EOT
-                MIMEObj  => $Message,
-                LogLevel => 'error'
-            );
         }
         return ( 0, "Could not load a valid user", undef );
     }
 
-    # }}}
-
-    # {{{ Lets check for mail loops of various sorts.
-    my $IsBounce = CheckForBounce($head);
-
-    my $IsAutoGenerated = CheckForAutoGenerated($head);
-
-    my $IsSuspiciousSender = CheckForSuspiciousSender($head);
-
-    my $IsALoop = CheckForLoops($head);
-
-    my $SquelchReplies = 0;
-
-    #If the message is autogenerated, we need to know, so we can not
-    # send mail to the sender
-    if ( $IsBounce || $IsSuspiciousSender || $IsAutoGenerated || $IsALoop ) {
-        $SquelchReplies = 1;
-        $ErrorsTo       = $RT::OwnerEmail;
-    }
-
-    # }}}
-
-    # {{{ Drop it if it's disallowed
+    # If we got a user, but they don't have the right to say things
     if ( $AuthStat == 0 ) {
         MailError(
             To          => $ErrorsTo,
             Subject     => "Permission Denied",
-            Explanation => "You do not have permission to communicate with RT",
-            MIMEObj     => $Message
+            Explanation =>
+                "You do not have permission to communicate with RT",
+            MIMEObj => $Message
         );
-    }
-
-    # }}}
-    # {{{ Warn someone  if it's a loop
-
-    # Warn someone if it's a loop, before we drop it on the ground
-    if ($IsALoop) {
-        $RT::Logger->crit("RT Recieved mail ($MessageId) from itself.");
-
-        #Should we mail it to RTOwner?
-        if ($RT::LoopsToRTOwner) {
-            MailError(
-                To          => $RT::OwnerEmail,
-                Subject     => "RT Bounce: $Subject",
-                Explanation => "RT thinks this message may be a bounce",
-                MIMEObj     => $Message
-            );
-        }
-
-        #Do we actually want to store it?
-        return ( 0, "Message Bounced", undef ) unless ($RT::StoreLoops);
-    }
-
-    # }}}
-
-    # {{{ Squelch replies if necessary
-    # Don't let the user stuff the RT-Squelch-Replies-To header.
-    if ( $head->get('RT-Squelch-Replies-To') ) {
-        $head->add(
-            'RT-Relocated-Squelch-Replies-To',
-            $head->get('RT-Squelch-Replies-To')
+        return (
+            0,
+            "$ErrorsTo tried to submit a message to "
+                . $args{'Queue'}
+                . " without permission.",
+            undef
         );
-        $head->delete('RT-Squelch-Replies-To');
     }
 
-    if ($SquelchReplies) {
-
-        # Squelch replies to the sender, and also leave a clue to
-        # allow us to squelch ALL outbound messages. This way we
-        # can punt the logic of "what to do when we get a bounce"
-        # to the scrip. We might want to notify nobody. Or just
-        # the RT Owner. Or maybe all Privileged watchers.
-        my ( $Sender, $junk ) = ParseSenderAddressFromHead($head);
-        $head->add( 'RT-Squelch-Replies-To', $Sender );
-        $head->add( 'RT-DetectedAutoGenerated', 'true' );
+    # {{{ Lets check for mail loops of various sorts.
+    my ($continue, $result);
+     ( $continue, $ErrorsTo, $result ) = _HandleMachineGeneratedMail(
+        Message  => $Message,
+        ErrorsTo => $ErrorsTo,
+        Subject  => $Subject,
+        MessageId => $MessageId
+    );
+
+    unless ($continue) {
+        return ( 0, $result, undef );
     }
+    
+    # strip actions we should skip
+    @actions = grep !$skip_action{$_}, @actions;
 
-    # }}}
+    # if plugin's updated SystemTicket then update arguments
+    $args{'ticket'} = $SystemTicket->Id if $SystemTicket && $SystemTicket->Id;
 
     my $Ticket = RT::Ticket->new($CurrentUser);
 
-    # {{{ If we don't have a ticket Id, we're creating a new ticket
-    if ( (!$SystemTicket || !$SystemTicket->Id) && 
-           grep /^(comment|correspond)$/, @actions ) {
-
-        # {{{ Create a new ticket
+    if ( !$args{'ticket'} && grep /^(comment|correspond)$/, @actions )
+    {
 
         my @Cc;
         my @Requestors = ( $CurrentUser->id );
@@ -776,42 +728,39 @@ EOT
                 Explanation => $ErrStr,
                 MIMEObj     => $Message
             );
-            $RT::Logger->error("Create failed: $id / $Transaction / $ErrStr ");
-            return ( 0, "Ticket creation failed", $Ticket );
+            return ( 0, "Ticket creation failed: $ErrStr", $Ticket );
         }
-       # strip comments&corresponds from the actions we don't need record twice
-       @actions = grep !/^(comment|correspond)$/, @actions;
-       $args{'ticket'} = $id;
 
-        # }}}
-    }
+        # strip comments&corresponds from the actions we don't need
+        # to record them if we've created the ticket just now
+        @actions = grep !/^(comment|correspond)$/, @actions;
+        $args{'ticket'} = $id;
 
-    $Ticket->Load( $args{'ticket'} );
-    unless ( $Ticket->Id ) {
-        my $message = "Could not find a ticket with id " . $args{'ticket'};
-        MailError(
-            To          => $ErrorsTo,
-            Subject     => "Message not recorded",
-            Explanation => $message,
-            MIMEObj     => $Message
-        );
-    
-        return ( 0, $message );
+    } else {
+
+        $Ticket->Load( $args{'ticket'} );
+        unless ( $Ticket->Id ) {
+            my $error = "Could not find a ticket with id " . $args{'ticket'};
+            MailError(
+                To          => $ErrorsTo,
+                Subject     => "Message not recorded",
+                Explanation => $error,
+                MIMEObj     => $Message
+            );
+
+            return ( 0, $error );
+        }
     }
 
     # }}}
-    foreach my $action( @actions ) {
+    foreach my $action (@actions) {
+
         #   If the action is comment, add a comment.
-        if ( $action =~ /^(comment|correspond)$/i ) {
-            my ( $status, $msg );
-            if ( $action =~ /^correspond$/i ) {
-                ( $status, $msg ) = $Ticket->Correspond( MIMEObj => $Message );
-            }
-            else {
-                ( $status, $msg ) = $Ticket->Comment( MIMEObj => $Message );
-            }
+        if ( $action =~ /^(?:comment|correspond)$/i ) {
+            my $method = ucfirst lc $action;
+            my ( $status, $msg ) = $Ticket->$method( MIMEObj => $Message );
             unless ($status) {
-    
+
                 #Warn the sender that we couldn't actually submit the comment.
                 MailError(
                     To          => $ErrorsTo,
@@ -819,79 +768,201 @@ EOT
                     Explanation => $msg,
                     MIMEObj     => $Message
                 );
-                return ( 0, "Message not recorded", $Ticket );
-            }
-        }
-        elsif ($RT::UnsafeEmailCommands && $action =~ /^take$/i ) {
-            my ( $status, $msg ) = $Ticket->SetOwner( $CurrentUser->id );
-            unless ($status) {
-    
-                #Warn the sender that we couldn't actually submit the comment.
-                MailError(
-                    To          => $ErrorsTo,
-                    Subject     => "Ticket not taken",
-                    Explanation => $msg,
-                    MIMEObj     => $Message
-                );
-                return ( 0, "Ticket not taken", $Ticket );
-            }
-        }
-        elsif ( $RT::UnsafeEmailCommands && $action =~ /^resolve$/i ) {
-            my ( $status, $msg ) = $Ticket->SetStatus( 'resolved' );
-            unless ($status) {
-                #Warn the sender that we couldn't actually submit the comment.
-                MailError(
-                    To          => $ErrorsTo,
-                    Subject     => "Ticket not resolved",
-                    Explanation => $msg,
-                    MIMEObj     => $Message
-                );
-                return ( 0, "Ticket not resolved", $Ticket );
+                return ( 0, "Message not recorded: $msg", $Ticket );
             }
+        } elsif ($RT::UnsafeEmailCommands) {
+            my ( $status, $msg ) = _RunUnsafeAction(
+                Action      => $action,
+                ErrorsTo    => $ErrorsTo,
+                Message     => $Message,
+                Ticket      => $Ticket,
+                CurrentUser => $CurrentUser,
+            );
+            return ($status, $msg, $Ticket) unless $status == 1;
         }
-    
-        else {
-    
-            #Return mail to the sender with an error
+    }
+    return ( 1, "Success", $Ticket );
+}
+
+sub _RunUnsafeAction {
+    my %args = (
+        Action      => undef,
+        ErrorsTo    => undef,
+        Message     => undef,
+        Ticket      => undef,
+        CurrentUser => undef,
+        @_
+    );
+
+    if ( $args{'Action'} =~ /^take$/i ) {
+        my ( $status, $msg ) = $args{'Ticket'}->SetOwner( $args{'CurrentUser'}->id );
+        unless ($status) {
             MailError(
-                To          => $ErrorsTo,
-                Subject     => "RT Configuration error",
-                Explanation => "'"
-                  . $args{'action'}
-                  . "' not a recognized action."
-                  . " Your RT administrator has misconfigured "
-                  . "the mail aliases which invoke RT",
-                MIMEObj => $Message
+                To          => $args{'ErrorsTo'},
+                Subject     => "Ticket not taken",
+                Explanation => $msg,
+                MIMEObj     => $args{'Message'}
             );
-            $RT::Logger->crit( $args{'action'} . " type unknown for $MessageId" );
-            return (
-                -75,
-                "Configuration error: "
-                  . $args{'action'}
-                  . " not a recognized action",
-                $Ticket
+            return ( 0, "Ticket not taken" );
+        }
+    } elsif ( $args{'Action'} =~ /^resolve$/i ) {
+        my ( $status, $msg ) = $args{'Ticket'}->SetStatus('resolved');
+        unless ($status) {
+
+            #Warn the sender that we couldn't actually submit the comment.
+            MailError(
+                To          => $args{'ErrorsTo'},
+                Subject     => "Ticket not resolved",
+                Explanation => $msg,
+                MIMEObj     => $args{'Message'}
             );
-    
+            return ( 0, "Ticket not resolved" );
         }
+    } else {
+        return ( 0, "Not supported unsafe action $args{'Action'}", $args{'Ticket'} );
     }
+    return ( 1, "Success" );
+}
 
-    return ( 1, "Success", $Ticket );
+=head2 _NoAuthorizedUserFound
+
+Emails the RT Owner and the requestor when the auth plugins return "No auth user found"
+
+=cut
+
+sub _NoAuthorizedUserFound {
+    my %args = (
+        Right     => undef,
+        Message   => undef,
+        Requestor => undef,
+        Queue     => undef,
+        @_
+    );
+
+    # Notify the RT Admin of the failure.
+    MailError(
+        To          => $RT::OwnerEmail,
+        Subject     => "Could not load a valid user",
+        Explanation => <<EOT,
+RT could not load a valid user, and RT's configuration does not allow
+for the creation of a new user for this email (@{[$args{Requestor}]}).
+
+You might need to grant 'Everyone' the right '@{[$args{Right}]}' for the
+queue @{[$args{'Queue'}]}.
+
+EOT
+        MIMEObj  => $args{'Message'},
+        LogLevel => 'error'
+    );
+
+    # Also notify the requestor that his request has been dropped.
+    MailError(
+        To          => $args{'Requestor'},
+        Subject     => "Could not load a valid user",
+        Explanation => <<EOT,
+RT could not load a valid user, and RT's configuration does not allow
+for the creation of a new user for your email.
+
+EOT
+        MIMEObj  => $args{'Message'},
+        LogLevel => 'error'
+    );
 }
 
-sub IsCorrectAction
-{
-       my $action = shift;
-       my @actions = split /-/, $action;
-       foreach ( @actions ) {
-               return (0, $_) unless /^(?:comment|correspond|take|resolve)$/;
-       }
-       return (1, @actions);
+=head2 _HandleMachineGeneratedMail
+
+Takes named params:
+    Message
+    ErrorsTo
+    Subject
+
+Checks the message to see if it's a bounce, if it looks like a loop, if it's autogenerated, etc.
+Returns a triple of ("Should we continue (boolean)", "New value for $ErrorsTo", "Status message");
+
+=cut
+
+sub _HandleMachineGeneratedMail {
+    my %args = ( Message => undef, ErrorsTo => undef, Subject => undef, MessageId => undef, @_ );
+    my $head = $args{'Message'}->head;
+    my $ErrorsTo = $args{'ErrorsTo'};
+
+    my $IsBounce = CheckForBounce($head);
+
+    my $IsAutoGenerated = CheckForAutoGenerated($head);
+
+    my $IsSuspiciousSender = CheckForSuspiciousSender($head);
+
+    my $IsALoop = CheckForLoops($head);
+
+    my $SquelchReplies = 0;
+
+    #If the message is autogenerated, we need to know, so we can not
+    # send mail to the sender
+    if ( $IsBounce || $IsSuspiciousSender || $IsAutoGenerated || $IsALoop ) {
+        $SquelchReplies = 1;
+        $ErrorsTo       = $RT::OwnerEmail;
+    }
+
+    # Warn someone if it's a loop, before we drop it on the ground
+    if ($IsALoop) {
+        $RT::Logger->crit("RT Recieved mail (".$args{MessageId}.") from itself.");
+
+        #Should we mail it to RTOwner?
+        if ($RT::LoopsToRTOwner) {
+            MailError(
+                To          => $RT::OwnerEmail,
+                Subject     => "RT Bounce: ".$args{'Subject'},
+                Explanation => "RT thinks this message may be a bounce",
+                MIMEObj     => $args{Message}
+            );
+        }
+
+        #Do we actually want to store it?
+        return ( 0, $ErrorsTo, "Message Bounced" ) unless ($RT::StoreLoops);
+    }
+
+    # Squelch replies if necessary
+    # Don't let the user stuff the RT-Squelch-Replies-To header.
+    if ( $head->get('RT-Squelch-Replies-To') ) {
+        $head->add(
+            'RT-Relocated-Squelch-Replies-To',
+            $head->get('RT-Squelch-Replies-To')
+        );
+        $head->delete('RT-Squelch-Replies-To');
+    }
+
+    if ($SquelchReplies) {
+
+        # Squelch replies to the sender, and also leave a clue to
+        # allow us to squelch ALL outbound messages. This way we
+        # can punt the logic of "what to do when we get a bounce"
+        # to the scrip. We might want to notify nobody. Or just
+        # the RT Owner. Or maybe all Privileged watchers.
+        my ( $Sender, $junk ) = ParseSenderAddressFromHead($head);
+        $head->add( 'RT-Squelch-Replies-To',    $Sender );
+        $head->add( 'RT-DetectedAutoGenerated', 'true' );
+    }
+    return ( 1, $ErrorsTo, "Handled machine detection" );
 }
 
+=head2 IsCorrectAction
+
+Returns a list of valid actions we've found for this message
+
+=cut
+
+sub IsCorrectAction {
+    my $action = shift;
+    my @actions = split /-/, $action;
+    foreach (@actions) {
+        return ( 0, $_ ) unless /^(?:comment|correspond|take|resolve)$/;
+    }
+    return ( 1, @actions );
+}
 
 eval "require RT::Interface::Email_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Vendor.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Interface/Email_Vendor.pm} );
 eval "require RT::Interface::Email_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Email_Local.pm});
+die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Interface/Email_Local.pm} );
 
 1;
index ef315dd..5143764 100644 (file)
@@ -60,6 +60,11 @@ sub GetCurrentUser {
 
     # We don't need to do any external lookups
     my ( $Address, $Name ) = ParseSenderAddressFromHead( $args{'Message'}->head );
+
+    unless ($Address) {
+        return ( $args{'CurrentUser'}, -1 );
+    }
+
     my $CurrentUser = RT::CurrentUser->new();
     $CurrentUser->LoadByEmail($Address);
 
index 279ddf4..981604b 100644 (file)
@@ -54,7 +54,7 @@ BEGIN {
     use Exporter ();
     use vars qw($VERSION @ISA @EXPORT);
 
-    $VERSION = do { my @r = (q$Revision: 1.1.1.3 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
+    $VERSION = do { my @r = (q$Revision: 1.1.1.3.4.1 $ =~ /\d+/g); sprintf "%d."."%02d"x$#r, @r };
 
     @ISA = qw(Exporter);
     @EXPORT = qw(expand_list form_parse form_compose vpush vsplit);
index 724d7e5..8bc840b 100644 (file)
@@ -288,9 +288,18 @@ sub CreateTicket {
         Body                => $ARGS{'Content'},
     );
 
-    if ($ARGS{'Attachments'}) {
-        $MIMEObj->make_multipart;
-        $MIMEObj->add_part($_) foreach values %{$ARGS{'Attachments'}};
+    if ( $ARGS{'Attachments'} ) {
+        my $rv = $MIMEObj->make_multipart;
+        $RT::Logger->error("Couldn't make multipart message")
+            if !$rv || $rv !~ /^(?:DONE|ALREADY)$/;
+
+        foreach ( values %{$ARGS{'Attachments'}} ) {
+            unless ( $_ ) {
+                $RT::Logger->error("Couldn't add empty attachemnt");
+                next;
+            }
+            $MIMEObj->add_part($_);
+        }
     }
 
     my %create_args = (
@@ -1132,161 +1141,174 @@ sub ProcessObjectCustomFieldUpdates {
     # Build up a list of objects that we want to work with
     my %custom_fields_to_mod;
     foreach my $arg ( keys %$ARGSRef ) {
-        if ( $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d+)-/ ) {
-            # For each of those objects, find out what custom fields we want to work with.
-            $custom_fields_to_mod{$1}{$2 || $args{'Object'}->Id}{$3} = 1;
-        }
+        # format: Object-<object class>-<object id>-CustomField-<CF id>-<commands>
+        next unless $arg =~ /^Object-([\w:]+)-(\d*)-CustomField-(\d+)-(.*)$/;
+
+        # For each of those objects, find out what custom fields we want to work with.
+        $custom_fields_to_mod{ $1 }{ $2 || 0 }{ $3 }{ $4 } = $ARGSRef->{ $arg };
     }
 
     # For each of those objects
     foreach my $class ( keys %custom_fields_to_mod ) {
-       foreach my $id ( keys %{$custom_fields_to_mod{$class}} ) {
-           my $Object = $args{'Object'};
-           if (!$Object or ref($Object) ne $class or $Object->id != $id) {
-               $Object = $class->new( $session{'CurrentUser'} );
-               $Object->Load($id);
-       }
+        foreach my $id ( keys %{$custom_fields_to_mod{$class}} ) {
+            my $Object = $args{'Object'};
+            $Object = $class->new( $session{'CurrentUser'} )
+                unless $Object && ref $Object eq $class;
+
+            $Object->Load( $id ) unless ($Object->id || 0) == $id;
+            unless ( $Object->id ) {
+                $RT::Logger->warning("Couldn't load object $class #$id");
+                next;
+            }
 
-           # For each custom field  
-           foreach my $cf ( keys %{ $custom_fields_to_mod{$class}{$id} } ) {
-           my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'});
-           $CustomFieldObj->LoadById($cf);
-
-               foreach my $arg ( keys %{$ARGSRef} ) {
-                   # Only interested in args for the current CF:
-                   next unless ( $arg =~ /^Object-$class-(?:$id)?-CustomField-$cf-/ );
-
-                   # since http won't pass in a form element with a null value, we need
-                   # to fake it
-                   if ($arg =~ /^(.*?)-Values-Magic$/ ) {
-                       # We don't care about the magic, if there's really a values element;
-                       next if ($ARGSRef->{$1.'-Value'} || $ARGSRef->{$1.'-Values'}) ;
-
-                        # "Empty" values does not mean anything for Image and Binary fields
-                        next if $CustomFieldObj->Type =~ /^(?:Image|Binary)$/;
-
-                       $arg = $1."-Values";
-                       $ARGSRef->{$1."-Values"} = undef;
-                   
-                   }
-                   my @values = ();
-                   if (ref( $ARGSRef->{$arg} ) eq 'ARRAY' ) {
-                       @values = @{ $ARGSRef->{$arg} };
-                   } elsif ($CustomFieldObj->Type =~ /text/i) { # Both Text and Wikitext
-                       @values = ($ARGSRef->{$arg});
-                   } else {
-                       @values = split /\n/, $ARGSRef->{$arg};
-                   }
-                   
-                   if ( ($CustomFieldObj->Type eq 'Freeform' 
-                         && ! $CustomFieldObj->SingleValue) ||
-                         $CustomFieldObj->Type =~ /text/i) {
-                       foreach my $val (@values) {
-                           $val =~ s/\r//g;
-                       }
-                   }
-
-                   if ( ( $arg =~ /-AddValue$/ ) || ( $arg =~ /-Value$/ ) ) {
-                       foreach my $value (@values) {
-                           next unless length($value);
-                           my ( $val, $msg ) = $Object->AddCustomFieldValue(
-                               Field => $cf,
-                               Value => $value
-                           );
-                           push ( @results, $msg );
-                       }
-                   }
-                   elsif ( $arg =~ /-Upload$/ ) {
-                        my $value_hash = _UploadedFile($arg) or next;
-
-                       my ( $val, $msg ) = $Object->AddCustomFieldValue(
-                            %$value_hash,
-                            Field => $cf,
-                       );
-                       push ( @results, $msg );
-                   }
-                   elsif ( $arg =~ /-DeleteValues$/ ) {
-                       foreach my $value (@values) {
-                           next unless length($value);
-                           my ( $val, $msg ) = $Object->DeleteCustomFieldValue(
-                               Field => $cf,
-                               Value => $value
-                           );
-                           push ( @results, $msg );
-                       }
-                   }
-                   elsif ( $arg =~ /-DeleteValueIds$/ ) {
-                       foreach my $value (@values) {
-                           next unless length($value);
-                           my ( $val, $msg ) = $Object->DeleteCustomFieldValue(
-                               Field => $cf,
-                               ValueId => $value,
-                           );
-                           push ( @results, $msg );
-                       }
-                   }
-                   elsif ( $arg =~ /-Values$/ and !$CustomFieldObj->Repeated) {
-                       my $cf_values = $Object->CustomFieldValues($cf);
-
-                       my %values_hash;
-                       foreach my $value (@values) {
-                           next unless length($value);
-
-                           # build up a hash of values that the new set has
-                           $values_hash{$value} = 1;
-
-                           unless ( $cf_values->HasEntry($value) ) {
-                               my ( $val, $msg ) = $Object->AddCustomFieldValue(
-                                   Field => $cf,
-                                   Value => $value
-                               );
-                               push ( @results, $msg );
-                           }
-
-                       }
-                       while ( my $cf_value = $cf_values->Next ) {
-                           unless ( $values_hash{ $cf_value->Content } == 1 ) {
-                               my ( $val, $msg ) = $Object->DeleteCustomFieldValue(
-                                   Field => $cf,
-                                   Value => $cf_value->Content
-                               );
-                               push ( @results, $msg);
-
-                           }
-                       }
-                   }
-                   elsif ( $arg =~ /-Values$/ ) {
-                       my $cf_values = $Object->CustomFieldValues($cf);
-
-                   # keep everything up to the point of difference, delete the rest
-                   my $delete_flag;
-                   foreach my $old_cf (@{$cf_values->ItemsArrayRef}) {
-                       if (!$delete_flag and @values and $old_cf->Content eq $values[0]) {
-                           shift @values;
-                           next;
-                       }
-
-                       $delete_flag ||= 1;
-                       $old_cf->Delete;
-                   }
-
-                   # now add/replace extra things, if any
-                   foreach my $value (@values) {
-                           my ( $val, $msg ) = $Object->AddCustomFieldValue(
-                           Field => $cf,
-                           Value => $value
-                       );
-                       push ( @results, $msg );
-                   }
-               }
-                   else {
-                       push ( @results, loc("User asked for an unknown update type for custom field [_1] for [_2] object #[_3]", $cf->Name, $class, $Object->id ) );
-                   }
-               }
-           }
-           return (@results);
-       }
+            foreach my $cf ( keys %{ $custom_fields_to_mod{ $class }{ $id } } ) {
+                my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} );
+                $CustomFieldObj->LoadById( $cf );
+                unless ( $CustomFieldObj->id ) {
+                    $RT::Logger->warning("Couldn't load custom field #$id");
+                    next;
+                }
+                push @results, _ProcessObjectCustomFieldUpdates(
+                    Prefix      => "Object-$class-$id-CustomField-$cf-",
+                    Object      => $Object,
+                    CustomField => $CustomFieldObj,
+                    ARGS        => $custom_fields_to_mod{$class}{$id}{$cf},
+                );
+            }
+        }
+    }
+    return @results;
+}
+
+sub _ProcessObjectCustomFieldUpdates {
+    my %args = @_;
+    my $cf = $args{'CustomField'};
+    my $cf_type = $cf->Type;
+
+    my @results;
+    foreach my $arg ( keys %{ $args{'ARGS'} } ) {
+
+        # since http won't pass in a form element with a null value, we need
+        # to fake it
+        if ( $arg eq 'Values-Magic' ) {
+            # We don't care about the magic, if there's really a values element;
+            next if $args{'ARGS'}->{'Value'} || $args{'ARGS'}->{'Values'};
+
+            # "Empty" values does not mean anything for Image and Binary fields
+            next if $cf_type =~ /^(?:Image|Binary)$/;
+
+            $arg = 'Values';
+            $args{'ARGS'}->{'Values'} = undef;
+        }
+
+        my @values = ();
+        if ( ref $args{'ARGS'}->{ $arg } eq 'ARRAY' ) {
+            @values = @{ $args{'ARGS'}->{$arg} };
+        } elsif ( $cf_type =~ /text/i ) { # Both Text and Wikitext
+            @values = ($args{'ARGS'}->{$arg});
+        } else {
+            @values = split /\n/, $args{'ARGS'}->{ $arg };
+        }
+        
+        if ( ( $cf_type eq 'Freeform' && !$cf->SingleValue ) || $cf_type =~ /text/i ) {
+            s/\r//g foreach @values;
+        }
+        @values = grep defined && $_ ne '', @values;
+
+        if ( $arg eq 'AddValue' || $arg eq 'Value' ) {
+            foreach my $value (@values) {
+                my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
+                    Field => $cf->id,
+                    Value => $value
+                );
+                push ( @results, $msg );
+            }
+        }
+        elsif ( $arg eq 'Upload' ) {
+            my $value_hash = _UploadedFile( $args{'Prefix'} . $arg ) or next;
+            my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
+                %$value_hash,
+                Field => $cf,
+            );
+            push ( @results, $msg );
+        }
+        elsif ( $arg eq 'DeleteValues' ) {
+            foreach my $value ( @values ) {
+                my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
+                    Field => $cf,
+                    Value => $value,
+                );
+                push ( @results, $msg );
+            }
+        }
+        elsif ( $arg eq 'DeleteValueIds' ) {
+            foreach my $value ( @values ) {
+                my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
+                    Field   => $cf,
+                    ValueId => $value,
+                );
+                push ( @results, $msg );
+            }
+        }
+        elsif ( $arg eq 'Values' && !$cf->Repeated ) {
+            my $cf_values = $args{'Object'}->CustomFieldValues( $cf->id );
+
+            my %values_hash;
+            foreach my $value ( @values ) {
+                # build up a hash of values that the new set has
+                $values_hash{$value} = 1;
+                next if $cf_values->HasEntry( $value );
+
+                my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
+                    Field => $cf,
+                    Value => $value
+                );
+                push ( @results, $msg );
+            }
+
+            $cf_values->RedoSearch;
+            while ( my $cf_value = $cf_values->Next ) {
+                next if $values_hash{ $cf_value->Content };
+
+                my ( $val, $msg ) = $args{'Object'}->DeleteCustomFieldValue(
+                    Field => $cf,
+                    Value => $cf_value->Content
+                );
+                push ( @results, $msg);
+            }
+        }
+        elsif ( $arg eq 'Values' ) {
+            my $cf_values = $args{'Object'}->CustomFieldValues( $cf->id );
+
+            # keep everything up to the point of difference, delete the rest
+            my $delete_flag;
+            foreach my $old_cf (@{$cf_values->ItemsArrayRef}) {
+                if (!$delete_flag and @values and $old_cf->Content eq $values[0]) {
+                    shift @values;
+                    next;
+                }
+
+                $delete_flag ||= 1;
+                $old_cf->Delete;
+            }
+
+            # now add/replace extra things, if any
+            foreach my $value ( @values ) {
+                my ( $val, $msg ) = $args{'Object'}->AddCustomFieldValue(
+                    Field => $cf,
+                    Value => $value
+                );
+                push ( @results, $msg );
+            }
+        }
+        else {
+            push ( @results, loc("User asked for an unknown update type"
+                ." for custom field [_1] for [_2] object #[_3]",
+                $cf->Name, ref $args{'Object'}, $args{'Object'}->id )
+            );
+        }
     }
+    return @results;
 }
 
 # {{{ sub ProcessTicketWatchers
index ce92225..e41490f 100644 (file)
@@ -117,7 +117,8 @@ sub InitSessionDir {
         # Clean up our umask to protect session files
         umask(0077);
 
-        if ($CGI::MOD_PERL) {
+        if ($CGI::MOD_PERL and $CGI::MOD_PERL < 1.9908 ) {
+
             chown( Apache->server->uid, Apache->server->gid,
                 $RT::MasonSessionDir )
             if Apache->server->can('uid');
index c870ee4..a45cb2a 100644 (file)
@@ -268,8 +268,8 @@ sub TargetURI {
 =cut
 
 sub TargetObj {
-  my $self = shift;
-   return $self->TargetURI->Object;
+    my $self = shift;
+    return $self->TargetURI->Object;
 }
 # }}}
 
index 203b60a..e1927f8 100644 (file)
@@ -154,19 +154,17 @@ sub Next {
     my $self = shift;
        
     my $Link = $self->SUPER::Next();
-    if ((defined($Link)) and (ref($Link))) {
-        # Skip links to local objects thast are deleted
-        if      ($Link->TargetURI->IsLocal and UNIVERSAL::isa($Link->TargetObj,"RT::Ticket")
-                 and $Link->TargetObj->__Value('status') eq "deleted") {
-            return $self->Next;
-        } elsif ($Link->BaseURI->IsLocal   and UNIVERSAL::isa($Link->BaseObj,"RT::Ticket")
-                 and $Link->BaseObj->__Value('status') eq "deleted") {
-            return $self->Next;
-        } else {
-            return $Link;
-        }
+    return $Link unless $Link && ref $Link;
+
+    # Skip links to local objects thast are deleted
+    if ( $Link->TargetURI->IsLocal and UNIVERSAL::isa($Link->TargetObj,"RT::Ticket")
+             and $Link->TargetObj->__Value('status') eq "deleted") {
+        return $self->Next;
+    } elsif ($Link->BaseURI->IsLocal   and UNIVERSAL::isa($Link->BaseObj,"RT::Ticket")
+             and $Link->BaseObj->__Value('status') eq "deleted") {
+        return $self->Next;
     } else {
-        return undef;
+        return $Link;
     }
 }
 
index 341d88b..1b62273 100755 (executable)
@@ -748,7 +748,7 @@ DBIx::SearchBuilder::Record
 
 sub _ClassAccessible {
     my $self = shift;
-    return $_TABLE_ATTR->{ref($self)};
+    return $_TABLE_ATTR->{ ref($self) || $self };
 }
 
 =head2 _Accessible COLUMN ATTRIBUTE
@@ -817,7 +817,10 @@ sub _EncodeLOB {
             elsif ($RT::DropLongAttachments) {
 
                 # drop the attachment on the floor
-                $RT::Logger->info( "$self: Dropped an attachment of size " . length($Body) . "\n" . "It started: " . substr( $Body, 0, 60 ) . "\n" );
+                $RT::Logger->info( "$self: Dropped an attachment of size "
+                                   . length($Body) . "\n"
+                                   . "It started: " . substr( $Body, 0, 60 ) . "\n"
+                                 );
                 return ("none", "Large attachment dropped" );
             }
         }
@@ -1459,7 +1462,7 @@ sub _NewTransaction {
 
     $self->_SetLastUpdated;
 
-    if ( defined $args{'TimeTaken'} ) {
+    if ( defined $args{'TimeTaken'} and $self->can('_UpdateTimeTaken')) {
         $self->_UpdateTimeTaken( $args{'TimeTaken'} );
     }
     if ( $RT::UseTransactionBatch and $transaction ) {
@@ -1634,10 +1637,11 @@ sub _AddCustomFieldValue {
                       );
                 }
             }
+            $values->RedoSearch if $i; # redo search if have deleted at least one value
         }
 
         my ( $old_value, $old_content );
-        if ( $old_value = $cf->ValuesForObject($self)->First ) {
+        if ( $old_value = $values->First ) {
             $old_content = $old_value->Content();
             return (1) if( $old_content eq $args{'Value'} && $old_value->LargeContent eq $args{'LargeContent'});;
         }
index bfff0f0..575333e 100644 (file)
@@ -103,23 +103,11 @@ sub _Accessible {
 
 sub _Set {
     my $self = shift;
-
-    # use super::value or we get acl blocked
-    if ( ( defined $self->SUPER::_Value('Queue') )
-        && ( $self->SUPER::_Value('Queue') == 0 ) )
-    {
-        unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'ModifyTemplate') ) {
-            return ( 0, $self->loc('Permission Denied') );
-        }
-    }
-    else {
-
-        unless ( $self->CurrentUserHasQueueRight('ModifyTemplate') ) {
-            return ( 0, $self->loc('Permission Denied') );
-        }
+    
+    unless ( $self->CurrentUserHasQueueRight('ModifyTemplate') ) {
+        return ( 0, $self->loc('Permission Denied') );
     }
-    return ( $self->SUPER::_Set(@_) );
-
+    return $self->SUPER::_Set( @_ );
 }
 
 # }}}
@@ -147,26 +135,12 @@ ok($t2->QueueObj->id, "Got the template's queue objet");
 =cut
 
 sub _Value {
-
     my $self  = shift;
-    my $field = shift;
-
-   
-    #If the current user doesn't have ACLs, don't let em at it.  
-    #use super::value or we get acl blocked
-    if ( ( !defined $self->__Value('Queue') )
-        || ( $self->__Value('Queue') == 0 ) )
-    {
-        unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'ShowTemplate') ) {
-            return (undef);
-        }
-    }
-    else {
-        unless ( $self->CurrentUserHasQueueRight('ShowTemplate') ) {
-            return (undef);
-        }
+
+    unless ( $self->CurrentUserHasQueueRight('ShowTemplate') ) {
+        return undef;
     }
-    return ( $self->__Value($field) );
+    return $self->__Value( @_ );
 
 }
 
@@ -183,18 +157,12 @@ Load a template, either by number or by name
 sub Load {
     my $self       = shift;
     my $identifier = shift;
+    return undef unless $identifier;
 
-    if ( !$identifier ) {
-        return (undef);
-    }
-
-    if ( $identifier !~ /\D/ ) {
-        $self->SUPER::LoadById($identifier);
-    }
-    else {
-        $self->LoadByCol( 'Name', $identifier );
-
+    if ( $identifier =~ /\D/ ) {
+        return $self->LoadByCol( 'Name', $identifier );
     }
+    return $self->LoadById( $identifier );
 }
 
 # }}}
@@ -260,32 +228,32 @@ sub Create {
         Content     => undef,
         Queue       => 0,
         Description => '[no description]',
-        Type => 'Action',    #By default, template are 'Action' templates
-        Name => undef,
+        Type        => 'Action', #By default, template are 'Action' templates
+        Name        => undef,
         @_
     );
 
-    if ( !$args{'Queue'}  ) {
+    unless ( $args{'Queue'} ) {
         unless ( $self->CurrentUser->HasRight(Right =>'ModifyTemplate', Object => $RT::System) ) {
-            return (undef);
+            return ( undef, $self->loc('Permission denied') );
         }
         $args{'Queue'} = 0;
     }
     else {
         my $QueueObj = new RT::Queue( $self->CurrentUser );
-        $QueueObj->Load( $args{'Queue'} ) || return ( 0, $self->loc('Invalid queue') );
+        $QueueObj->Load( $args{'Queue'} ) || return ( undef, $self->loc('Invalid queue') );
     
         unless ( $QueueObj->CurrentUserHasRight('ModifyTemplate') ) {
-            return (undef);
+            return ( undef, $self->loc('Permission denied') );
         }
         $args{'Queue'} = $QueueObj->Id;
     }
 
     my $result = $self->SUPER::Create(
-        Content => $args{'Content'},
-        Queue   =>  $args{'Queue'},
+        Content     => $args{'Content'},
+        Queue       => $args{'Queue'},
         Description => $args{'Description'},
-        Name        => $args{'Name'}
+        Name        => $args{'Name'},
     );
 
     return ($result);
@@ -340,15 +308,16 @@ sub Parse {
     my $self = shift;
 
     #We're passing in whatever we were passed. it's destined for _ParseContent
-    my $content = $self->_ParseContent(@_);
+    my ($content, $msg) = $self->_ParseContent(@_);
+    return ( 0, $msg ) unless defined $content;
 
     #Lets build our mime Entity
 
     my $parser = MIME::Parser->new();
 
-        # On some situations TMPDIR is non-writable. sad but true.
-        $parser->output_to_core(1);
-        $parser->tmp_to_core(1);
+    # On some situations TMPDIR is non-writable. sad but true.
+    $parser->output_to_core(1);
+    $parser->tmp_to_core(1);
 
     #If someone includes a message, don't extract it
     $parser->extract_nested_messages(1);
@@ -363,15 +332,13 @@ sub Parse {
     ### Should we forgive normally-fatal errors?
     $parser->ignore_errors(1);
     $self->{'MIMEObj'} = eval { $parser->parse_data($content) };
-    my $error = ( $@ || $parser->last_error );
-
-    if ($error) {
-        $RT::Logger->error("$error");
+    if ( my $error = $@ || $parser->last_error ) {
+        $RT::Logger->error( "$error" );
         return ( 0, $error );
     }
 
     # Unfold all headers
-    $self->{'MIMEObj'}->head->unfold();
+    $self->{'MIMEObj'}->head->unfold;
 
     return ( 1, $self->loc("Template parsed") );
 
@@ -400,9 +367,13 @@ sub _ParseContent {
     $T::rtname      = $RT::rtname;
     *T::loc         = sub { $T::Ticket->loc(@_) };
 
+    my $content = $self->Content;
+    unless ( defined $content ) {
+        return ( undef, $self->loc("Permissions denied") );
+    }
+
     # We need to untaint the content of the template, since we'll be working
     # with it
-    my $content = $self->Content();
     $content =~ s/^(.*)$/$1/;
     my $template = Text::Template->new(
         TYPE   => 'STRING',
@@ -413,11 +384,11 @@ sub _ParseContent {
     my $retval = $template->fill_in( PACKAGE => 'T', BROKEN => sub {
         my (%args) = @_;
         $RT::Logger->error("Template parsing error: $args{error}")
-           unless $args{error} =~ /^Died at /; # ignore intentional die()
+            unless $args{error} =~ /^Died at /; # ignore intentional die()
         $is_broken++;
-       return undef;
+        return undef;
     } );
-    return undef if $is_broken;
+    return ( undef, $self->loc('Template parsing error') ) if $is_broken;
 
     # MIME::Parser has problems dealing with high-bit utf8 data.
     Encode::_utf8_off($retval);
index 1ab91e2..a294dca 100644 (file)
@@ -240,7 +240,7 @@ sub Load {
 
 
     #If it's a local URI, turn it into a ticket id
-    if ( $id =~ /^$RT::TicketBaseURI(\d+)$/ ) {
+    if ( $RT::TicketBaseURI && $id =~ /^$RT::TicketBaseURI(\d+)$/ ) {
         $id = $1;
     }
 
@@ -440,9 +440,9 @@ sub Create {
     if ( $args{'Due'} ) {
         $Due->Set( Format => 'ISO', Value => $args{'Due'} );
     }
-    elsif ( $QueueObj->DefaultDueIn ) {
+    elsif ( my $due_in = $QueueObj->DefaultDueIn ) {
         $Due->SetToNow;
-        $Due->AddDays( $QueueObj->DefaultDueIn );
+        $Due->AddDays( $due_in );
     }
 
     my $Starts = new RT::Date( $self->CurrentUser );
@@ -1315,6 +1315,10 @@ sub AddWatcher {
         @_
     );
 
+    # XXX, FIXME, BUG: if only email is provided then we only check
+    # for ModifyTicket right, but must try to get PrincipalId and
+    # check Watch* rights too if user exist
+
     # {{{ Check ACLS
     #If the watcher we're trying to add is for the current user
     if ( $self->CurrentUser->PrincipalId  eq $args{'PrincipalId'}) {
@@ -1979,11 +1983,16 @@ sub SetQueue {
         )
       )
     {
-        $self->Untake();
+        my $clone = RT::Ticket->new( $RT::SystemUser );
+        $clone->Load( $self->Id );
+        unless ( $clone->Id ) {
+            return ( 0, $self->loc("Couldn't load copy of ticket #[_1].", $self->Id) );
+        }
+        my ($status, $msg) = $clone->SetOwner( $RT::Nobody->Id, 'Force' );
+        $RT::Logger->error("Couldn't set owner on queue change: $msg") unless $status;
     }
 
     return ( $self->_Set( Field => 'Queue', Value => $NewQueueObj->Id() ) );
-
 }
 
 # }}}
@@ -3018,21 +3027,21 @@ sub SetOwner {
 
     $RT::Handle->Commit();
 
-    my ( $trans, $msg, undef ) = $self->_NewTransaction(
-                                                   Type     => $Type,
-                                                   Field    => 'Owner',
-                                                   NewValue => $NewOwnerObj->Id,
-                                                   OldValue => $OldOwnerObj->Id,
-                                                   TimeTaken => 0 );
+    ($val, $msg) = $self->_NewTransaction(
+        Type      => $Type,
+        Field     => 'Owner',
+        NewValue  => $NewOwnerObj->Id,
+        OldValue  => $OldOwnerObj->Id,
+        TimeTaken => 0,
+    );
 
-    if ($trans) {
+    if ( $val ) {
         $msg = $self->loc( "Owner changed from [_1] to [_2]",
                            $OldOwnerObj->Name, $NewOwnerObj->Name );
 
         # TODO: make sure the trans committed properly
     }
-    return ( $trans, $msg );
-
+    return ( $val, $msg );
 }
 
 # }}}
@@ -3679,15 +3688,15 @@ sub CustomFieldValues {
     my $field = shift;
     if ( $field and $field !~ /^\d+$/ ) {
         my $cf = RT::CustomField->new( $self->CurrentUser );
-        $cf->LoadByNameAndQueue( Name => $field, Queue => $self->QueueObj->Id );
+        $cf->LoadByNameAndQueue( Name => $field, Queue => $self->Queue );
         unless ( $cf->id ) {
-            $cf->LoadByNameAndQueue( Name => $field, Queue => '0' );
+            $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);
+        unless ( $cf->id ) {
+            # If we didn't find a valid cfid, give up.
+            return RT::CustomFieldValues->new($self->CurrentUser);
         }
+        $field = $cf->id;
     }
     return $self->SUPER::CustomFieldValues($field);
 }
index 1c31f3f..98a6ac6 100644 (file)
@@ -272,7 +272,7 @@ sub _EnumLimit {
         or $op     eq "!=";
 
     my $meta = $FIELDS{$field};
-    if ( defined $meta->[1] ) {
+    if ( defined $meta->[1] && defined $value && $value !~ /^\d+$/ ) {
         my $class = "RT::" . $meta->[1];
         my $o     = $class->new( $sb->CurrentUser );
         $o->Load($value);
@@ -450,11 +450,8 @@ sub _DateLimit {
     die "Incorrect Meta Data for $field"
         unless ( defined $meta->[1] );
 
-    use POSIX 'strftime';
-
     my $date = RT::Date->new( $sb->CurrentUser );
     $date->Set( Format => 'unknown', Value => $value );
-    my $time = $date->Unix;
 
     if ( $op eq "=" ) {
 
@@ -462,10 +459,10 @@ sub _DateLimit {
         # 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 ) ) );
+        $date->SetToMidnight( Timezone => 'server' );
+        my $daystart = $date->ISO;
+        $date->AddDay;
+        my $dayend = $date->ISO;
 
         $sb->_OpenParen;
 
@@ -488,11 +485,10 @@ sub _DateLimit {
 
     }
     else {
-        $value = strftime( "%Y-%m-%d %H:%M", gmtime($time) );
         $sb->_SQLLimit(
             FIELD    => $meta->[1],
             OPERATOR => $op,
-            VALUE    => $value,
+            VALUE    => $date->ISO,
             @rest,
         );
     }
@@ -545,7 +541,6 @@ sub _TransDateLimit {
 
     my $date = RT::Date->new( $sb->CurrentUser );
     $date->Set( Format => 'unknown', Value => $value );
-    my $time = $date->Unix;
 
     $sb->_OpenParen;
     if ( $op eq "=" ) {
@@ -554,10 +549,10 @@ sub _TransDateLimit {
         # 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 ) ) );
+        $date->SetToMidnight( Timezone => 'server' );
+        my $daystart = $date->ISO;
+        $date->AddDay;
+        my $dayend = $date->ISO;
 
         $sb->_SQLLimit(
             ALIAS         => $sb->{_sql_transalias},
@@ -587,7 +582,7 @@ sub _TransDateLimit {
             ALIAS         => $sb->{_sql_transalias},
             FIELD         => 'Created',
             OPERATOR      => $op,
-            VALUE         => $value,
+            VALUE         => $date->ISO,
             CASESENSITIVE => 0,
             @rest
         );
@@ -918,7 +913,7 @@ sub _WatcherJoin {
     # 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(
+    $self->SUPER::Limit(
         LEFTJOIN   => $groupmembers,
         FIELD      => 'GroupId',
         OPERATOR   => '!=',
@@ -1413,12 +1408,11 @@ sub LimitQueue {
         @_
     );
 
-    #TODO  VALUE should also take queue names and queue objects
-    #TODO FIXME why are we canonicalizing to name, not id, robrt?
-    if ( $args{VALUE} =~ /^\d+$/ ) {
+    #TODO  VALUE should also take queue objects
+    if ( defined $args{'VALUE'} && $args{'VALUE'} !~ /^\d+$/ ) {
         my $queue = new RT::Queue( $self->CurrentUser );
         $queue->Load( $args{'VALUE'} );
-        $args{VALUE} = $queue->Name;
+        $args{'VALUE'} = $queue->Id;
     }
 
     # What if they pass in an Id?  Check for isNum() and convert to
@@ -1428,10 +1422,10 @@ sub LimitQueue {
 
     $self->Limit(
         FIELD       => 'Queue',
-        VALUE       => $args{VALUE},
+        VALUE       => $args{'VALUE'},
         OPERATOR    => $args{'OPERATOR'},
         DESCRIPTION => join(
-            ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE},
+            ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{'VALUE'},
         ),
     );
 
index f6647c6..d49e8d3 100644 (file)
@@ -149,7 +149,13 @@ sub Create {
  
     my $id = $self->SUPER::Create(%params);
     $self->Load($id);
-    $self->_Attach( $args{'MIMEObj'} ) if defined $args{'MIMEObj'};
+    if ( defined $args{'MIMEObj'} ) {
+        my ($id, $msg) = $self->_Attach( $args{'MIMEObj'} );
+        unless ( $id ) {
+            $RT::Logger->error("Couldn't add attachment: $msg");
+            return ( 0, $self->loc("Couldn't add attachment") );
+        }
+    }
 
 
     #Provide a way to turn off scrips if we need to
@@ -471,11 +477,11 @@ sub _Attach {
     }
 
     my $Attachment = new RT::Attachment( $self->CurrentUser );
-    $Attachment->Create(
+    my ($id, $msg) = $Attachment->Create(
         TransactionId => $self->Id,
         Attachment    => $MIMEObject
     );
-    return ( $Attachment, $self->loc("Attachment created") );
+    return ( $Attachment, $msg || $self->loc("Attachment created") );
 
 }
 
@@ -934,25 +940,29 @@ sub TicketObj {
 
 sub OldValue {
     my $self = shift;
-    if (my $type = $self->__Value('ReferenceType')) {
-       my $Object = $type->new($self->CurrentUser);
-       $Object->Load($self->__Value('OldReference'));
-       return $Object->Content;
+    if ( my $type = $self->__Value('ReferenceType')
+         and my $id = $self->__Value('OldReference') )
+    {
+        my $Object = $type->new($self->CurrentUser);
+        $Object->Load( $id );
+        return $Object->Content;
     }
     else {
-       return $self->__Value('OldValue');
+        return $self->__Value('OldValue');
     }
 }
 
 sub NewValue {
     my $self = shift;
-    if (my $type = $self->__Value('ReferenceType')) {
-       my $Object = $type->new($self->CurrentUser);
-       $Object->Load($self->__Value('NewReference'));
-       return $Object->Content;
+    if ( my $type = $self->__Value('ReferenceType')
+         and my $id = $self->__Value('NewReference') )
+    {
+        my $Object = $type->new($self->CurrentUser);
+        $Object->Load( $id );
+        return $Object->Content;
     }
     else {
-       return $self->__Value('NewValue');
+        return $self->__Value('NewValue');
     }
 }
 
index fdbe63b..e4e533a 100644 (file)
@@ -143,7 +143,7 @@ sub FromURI {
     
     unless ($self->Resolver->ParseURI($uri)) {
         $RT::Logger->warning("Resolver ".ref($self->Resolver)." could not parse $uri");
-        $self->{resolver} = undef; # clear resolver
+        $self->{resolver} = RT::URI::base->new( $self->CurrentUser ); # clear resolver
        return (undef);
     }
 
index 56bfef3..49d0808 100644 (file)
@@ -81,12 +81,8 @@ sub ParseObject  {
     my $self = shift;
     my $obj = shift;
     $self->{'uri'} = "unknown-object:".ref($obj);
-
-
 }
 
-
-
 sub ParseURI { 
     my $self = shift;
     my $uri = shift;
index ba98b1d..bb2c188 100644 (file)
@@ -128,7 +128,7 @@ is($uri->LocalURIPrefix. "/ticket/1" , $uri->URIForObject($ticket));
 sub URIForObject {
     my $self = shift;
     my $obj = shift;
-    return ($self->LocalURIPrefix."/".$self->ObjectType($obj)."/". $obj->Id);
+    return ($self->LocalURIPrefix ."/". $self->ObjectType($obj) ."/". $obj->Id);
 }
 
 
@@ -143,12 +143,12 @@ sub ParseURI {
     my $self = shift;
     my $uri  = shift;
 
-    if ( $uri =~ /^(\d+)$/ ) {
+    if ( $uri =~ /^\d+$/ ) {
         my $ticket = RT::Ticket->new( $self->CurrentUser );
-        $ticket->Load($uri);
+        $ticket->Load( $uri );
         $self->{'uri'} = $ticket->URI;
         $self->{'object'} = $ticket;
-        return($ticket->id);
+        return ($ticket->id);
     }
     else {
         $self->{'uri'} = $uri;
@@ -156,9 +156,8 @@ sub ParseURI {
 
     #If it's a local URI, load the ticket object and return its URI
     if ( $self->IsLocal ) {
-
         my $local_uri_prefix = $self->LocalURIPrefix;
-        if ( $self->{'uri'} =~ /^$local_uri_prefix\/(.*?)\/(\d+)$/i ) {
+        if ( $self->{'uri'} =~ /^\Q$local_uri_prefix\E\/(.*?)\/(\d+)$/i ) {
             my $type = $1;
             my $id   = $2;
 
@@ -192,9 +191,9 @@ Returns undef otherwise.
 
 sub IsLocal {
        my $self = shift;
-        my $local_uri_prefix = $self->LocalURIPrefix;
-       if ($self->{'uri'} =~ /^$local_uri_prefix/i) {
-               return 1;
+    my $local_uri_prefix = $self->LocalURIPrefix;
+    if ( $self->{'uri'} =~ /^\Q$local_uri_prefix/i ) {
+        return 1;
     }
        else {
                return undef;
diff --git a/rt/lib/t/regression/06-mime_decoding.t b/rt/lib/t/regression/06-mime_decoding.t
new file mode 100644 (file)
index 0000000..98af185
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use Test::More tests => 5;
+
+use_ok("RT");
+
+RT::LoadConfig();
+RT::Init();
+
+use_ok('RT::I18N');
+
+diag q{'=' char in a leading part before an encoded part} if $ENV{TEST_VERBOSE};
+{
+    my $str = 'key="plain"; key="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="';
+    is(
+        RT::I18N::DecodeMIMEWordsToUTF8($str),
+        'key="plain"; key="мой_файл.bin"',
+        "right decoding"
+    );
+}
+
+diag q{not compliant with standards, but MUAs send such field when attachment has non-ascii in name}
+    if $ENV{TEST_VERBOSE};
+{
+    my $str = 'attachment; filename="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="';
+    is(
+        RT::I18N::DecodeMIMEWordsToUTF8($str),
+        'attachment; filename="мой_файл.bin"',
+        "right decoding"
+    );
+}
+
+diag q{'=' char in a trailing part after an encoded part} if $ENV{TEST_VERBOSE};
+{
+    my $str = 'attachment; filename="=?UTF-8?B?0LzQvtC5X9GE0LDQudC7LmJpbg==?="; some_prop="value"';
+    is(
+        RT::I18N::DecodeMIMEWordsToUTF8($str),
+        'attachment; filename="мой_файл.bin"; some_prop="value"',
+        "right decoding"
+    );
+}
+
index 1bdc38a..12b5588 100644 (file)
@@ -52,13 +52,19 @@ rt-mailgate - Mail interface to RT3.
 =cut
 
 use strict;
-use Test::More tests => 57;
+use Test::More tests => 104;
+
 use RT;
 RT::LoadConfig();
 RT::Init();
 use RT::I18N;
+
+no warnings 'once';
+my $url = join( ':', grep $_, "http://localhost", $RT::WebPort ) . $RT::WebPath ."/";
+
 # Make sure that when we call the mailgate wrong, it tempfails
 
+$! = '';
 ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url http://this.test.for.non-connection.is.expected.to.generate.an.error"), "Opened the mailgate - The error below is expected - $@");
 print MAIL <<EOF;
 From: root\@localhost
@@ -75,7 +81,8 @@ is ( $? >> 8, 75, "The error message above is expected The mail gateway exited w
 
 # {{{ Test new ticket creation by root who is privileged and superuser
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate  --debug --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: root\@localhost
 To: rt\@$RT::rtname
@@ -103,7 +110,8 @@ ok ($tick->Subject eq 'This is a test of new ticket creation', "Created the tick
 
 # {{{This is a test of new ticket creation as an unknown user
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist\@$RT::rtname
 To: rt\@$RT::rtname
@@ -139,7 +147,8 @@ my ($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
 ok ($val, "Granted everybody the right to create tickets - $msg");
 
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist\@$RT::rtname
 To: rt\@$RT::rtname
@@ -172,7 +181,8 @@ ok( $u->Id != 0, " user does not exist and was created by ticket submission");
 #($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
 #ok ($val, "Granted everybody the right to create tickets - $msg");
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist-2\@$RT::rtname
 To: rt\@$RT::rtname
@@ -197,7 +207,8 @@ ok( $u->Id == 0, " user does not exist and was not created by ticket corresponde
 ($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'ReplyToTicket');
 ok ($val, "Granted everybody the right to reply to  tickets - $msg");
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist-2\@$RT::rtname
 To: rt\@$RT::rtname
@@ -223,7 +234,8 @@ ok( $u->Id != 0, " user exists and was created by ticket correspondence submissi
 #($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket');
 #ok ($val, "Granted everybody the right to create tickets - $msg");
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action comment"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action comment"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist-3\@$RT::rtname
 To: rt\@$RT::rtname
@@ -248,7 +260,8 @@ ok( $u->Id == 0, " user does not exist and was not created by ticket comment sub
 ($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CommentOnTicket');
 ok ($val, "Granted everybody the right to reply to  tickets - $msg");
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action comment"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action comment"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: doesnotexist-3\@$RT::rtname
 To: rt\@$RT::rtname
@@ -289,7 +302,8 @@ $entity->attach(Path => $LOGO_FILE,
                 Encoding => 'base64');
 
 # Create a ticket with a binary attachment
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
 
 $entity->print(\*MAIL);
 
@@ -334,7 +348,7 @@ use LWP::UserAgent;
 # Grab the binary attachment via the web ui
 my $ua      = LWP::UserAgent->new();
 
-my $full_url = "$RT::WebURL/Ticket/Attachment/".$attachment->TransactionId."/".$attachment->id."/bplogo.gif?&user=root&pass=password";
+my $full_url = "$url/Ticket/Attachment/".$attachment->TransactionId."/".$attachment->id."/bplogo.gif?&user=root&pass=password";
 my $r = $ua->get( $full_url);
 
 
@@ -347,7 +361,8 @@ is($file, $r->content, 'The attachment isn\'t screwed up in download');
 
 # {{{ Simple I18N testing
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
                                                                          
 print MAIL <<EOF;
 From: root\@localhost
@@ -381,7 +396,8 @@ is ($unitick->Transactions->First->Content, $unitick->Transactions->First->Attac
 ok($unitick->Transactions->First->Attachments->First->Content =~ /$unistring/i, $unitick->Id." appears to be unicode ". $unitick->Transactions->First->Attachments->First->Id);
 # supposedly I18N fails on the second message sent in.
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue general --action correspond"), "Opened the mailgate - $!");
                                                                          
 print MAIL <<EOF;
 From: root\@localhost
@@ -420,20 +436,28 @@ ok ($tick2->Transactions->First->Content =~ $unistring, "It appears to be unicod
 ($val,$msg) = $g->PrincipalObj->RevokeRight(Right => 'CreateTicket');
 ok ($val, $msg);
 
-=for later
+##=for later
 
-TODO: {
+SKIP: {
+skip "Advanced mailgate actions require an unsafe configuration", 47 unless $RT::UnsafeEmailCommands;
+
+#create new queue to be shure we don't mess with rights
+use RT::Queue;
+my $queue = RT::Queue->new($RT::SystemUser);
+my ($qid) = $queue->Create( Name => 'ext-mailgate');
+ok( $qid, 'queue created for ext-mailgate tests' );
 
 # {{{ Check take and resolve actions
 
 # create ticket that is owned by nobody
 use RT::Ticket;
 $tick = RT::Ticket->new($RT::SystemUser);
-my ($id) = $tick->Create( Queue => 'general', Subject => 'test');
+my ($id) = $tick->Create( Queue => 'ext-mailgate', Subject => 'test');
 ok( $id, 'new ticket created' );
 is( $tick->Owner, $RT::Nobody->Id, 'owner of the new ticket is nobody' );
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action take"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: root\@localhost
 Subject: [$RT::rtname \#$id] test
@@ -450,15 +474,15 @@ is( $tick->OwnerObj->EmailAddress, 'root@localhost', 'successfuly take ticket vi
 # check that there is no text transactions writen
 is( $tick->Transactions->Count, 2, 'no superfluous transactions');
 
-my $status = '';
+my $status;
 ($status, $msg) = $tick->SetOwner( $RT::Nobody->Id, 'Force' );
 ok( $status, 'successfuly changed owner: '. ($msg||'') );
 is( $tick->Owner, $RT::Nobody->Id, 'set owner back to nobody');
 
 
 
-    local $TODO = "Advanced mailgate actions require an unsafe configuration";
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action take-correspond"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $@");
 print MAIL <<EOF;
 From: root\@localhost
 Subject: [$RT::rtname \#$id] correspondence
@@ -468,17 +492,21 @@ EOF
 close (MAIL);
 is ($? >> 8, 0, "The mail gateway exited normally");
 
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
 $tick = RT::Ticket->new($RT::SystemUser);
 $tick->Load( $id );
-is( $tick->Id, $id, 'load correct ticket');
+is( $tick->Id, $id, "load correct ticket #$id");
 is( $tick->OwnerObj->EmailAddress, 'root@localhost', 'successfuly take ticket via email');
 my $txns = $tick->Transactions;
 $txns->Limit( FIELD => 'Type', VALUE => 'Correspond');
-is( $txns->Last->Subject, "[$RT::rtname \#$id] correspondence", 'successfuly add correspond within take via email' );
+$txns->OrderBy( FIELD => 'id', ORDER => 'DESC' );
 # +1 because of auto open
 is( $tick->Transactions->Count, 6, 'no superfluous transactions');
+is( $txns->First->Subject, "[$RT::rtname \#$id] correspondence", 'successfuly add correspond within take via email' );
 
-ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action resolve"), "Opened the mailgate - $@");
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action resolve --debug"), "Opened the mailgate - $!");
 print MAIL <<EOF;
 From: root\@localhost
 Subject: [$RT::rtname \#$id] test
@@ -495,10 +523,115 @@ is( $tick->Id, $id, 'load correct ticket');
 is( $tick->Status, 'resolved', 'successfuly resolved ticket via email');
 is( $tick->Transactions->Count, 7, 'no superfluous transactions');
 
-};
+use RT::User;
+my $user = RT::User->new( $RT::SystemUser );
+my ($uid) = $user->Create( Name => 'ext-mailgate',
+                          EmailAddress => 'ext-mailgate@localhost',
+                          Privileged => 1,
+                          Password => 'qwe123',
+                        );
+ok( $uid, 'user created for ext-mailgate tests' );
+ok( !$user->HasRight( Right => 'OwnTicket', Object => $queue ), "User can't own ticket" );
+
+$tick = RT::Ticket->new($RT::SystemUser);
+($id) = $tick->Create( Queue => $qid, Subject => 'test' );
+ok( $id, 'create new ticket' );
+
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [example.com \#$id] test
+
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'ReplyToTicket' );
+ok( $status, "successfuly granted right: $msg" );
+my $ace_id = $status;
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "User can reply to ticket" );
+
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action correspond-take"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [example.com \#$id] test
+
+correspond-take
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+is( $tick->Transactions->Count, 3, "one transactions added" );
+
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [example.com \#$id] test
+
+correspond-take
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+cmp_ok( $tick->Owner, '!=', $user->id, "we didn't change owner" );
+is( $tick->Transactions->Count, 3, "no transactions added, user can't take ticket first" );
+
+# revoke ReplyToTicket right
+use RT::ACE;
+my $ace = RT::ACE->new($RT::SystemUser);
+$ace->Load( $ace_id );
+$ace->Delete;
+my $acl = RT::ACL->new($RT::SystemUser);
+$acl->Limit( FIELD => 'RightName', VALUE => 'ReplyToTicket' );
+$acl->LimitToObject( $RT::System );
+while( my $ace = $acl->Next ) {
+       $ace->Delete;
+}
+
+ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "User can't reply to ticket any more" );
+
+
+my $group = RT::Group->new( $RT::SystemUser );
+ok( $group->LoadQueueRoleGroup( Queue => $qid, Type=> 'Owner' ), "load queue owners role group" );
+$ace = RT::ACE->new( $RT::SystemUser );
+($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ReplyToTicket', Object => $queue );
+ok( $ace_id, "Granted queue owners role group with ReplyToTicket right" );
+
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'OwnTicket' );
+ok( $status, "successfuly granted right: $msg" );
+($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'TakeTicket' );
+ok( $status, "successfuly granted right: $msg" );
+
+$! = '';
+ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $url --queue ext-mailgate --action take-correspond"), "Opened the mailgate - $!");
+print MAIL <<EOF;
+From: ext-mailgate\@localhost
+Subject: [example.com \#$id] test
+
+take-correspond with reply right granted to owner role
+EOF
+close (MAIL);
+is ( $? >> 8, 0, "mailgate exited normally" );
+DBIx::SearchBuilder::Record::Cachable->FlushCache;
+
+$tick->Load( $id );
+is( $tick->Owner, $user->id, "we changed owner" );
+ok( $user->HasRight( Right => 'ReplyToTicket', Object => $tick ), "owner can reply to ticket" );
+is( $tick->Transactions->Count, 5, "transactions added" );
 
-=cut
 
 # }}}
+};
+
 
 1;
+
index 958273c..f43fc64 100644 (file)
@@ -1,6 +1,13 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+
 #use Test::More tests => 26;
 use Test::More qw/no_plan/;
+
 $ENV{'TZ'} = 'GMT';
+
 use RT;
 RT::LoadConfig();
 RT::Init();
@@ -29,4 +36,5 @@ is($txnobj->CreatedObj->ISO,'2005-08-05 20:00:56');
 
 $tix->FromSQL(qq{Updated = "2005-08-05" AND Subject = "$SUBJECT"});
 is( $tix->Count, 1);
-1;
+
+exit 0;
diff --git a/rt/lib/t/regression/23-web_attachments.t b/rt/lib/t/regression/23-web_attachments.t
new file mode 100644 (file)
index 0000000..d9d1a84
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/perl -w
+use strict;
+
+use Test::More tests => 15;
+use RT;
+RT::LoadConfig;
+RT::Init;
+use Test::WWW::Mechanize;
+
+$RT::WebURL ||= 0; # avoid stupid warning
+my $BaseURL = $RT::WebURL;
+use constant LogoFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif';
+use constant FaviconFile => $RT::MasonComponentRoot .'/NoAuth/images/favicon.png';
+
+my $queue_name = 'General';
+
+my $m = Test::WWW::Mechanize->new;
+isa_ok($m, 'Test::WWW::Mechanize');
+
+$m->get_ok( $BaseURL."?user=root;pass=password" );
+$m->content_like(qr/Logout/, 'we did log in');
+
+my $qid;
+{
+    $m->content =~ /<SELECT\s+NAME\s*="Queue">.*?<OPTION\s+VALUE="(\d+)"\s*\d*>\s*\Q$queue_name\E\s*<\/OPTION>/msi;
+    ok( $qid = $1, "found id of the '$queue_name' queue");
+}
+
+$m->form_number(1);
+$m->field('Queue', $qid);
+$m->submit;
+is($m->status, 200, "request successful");
+$m->content_like(qr/Create a new ticket/, 'ticket create page');
+
+$m->form('TicketCreate');
+$m->field('Subject', 'Attachments test');
+$m->field('Attach',  LogoFile);
+$m->field('Content', 'Some content');
+$m->submit;
+is($m->status, 200, "request successful");
+
+$m->content_like(qr/Attachments test/, 'we have subject on the page');
+$m->content_like(qr/Some content/, 'and content');
+$m->content_like(qr/Download bplogo\.gif/, 'page has file name');
+
+$m->follow_link_ok({text => 'Reply'}, "reply to the ticket");
+$m->form('TicketUpdate');
+$m->field('Attach',  LogoFile);
+$m->click('AddMoreAttach');
+is($m->status, 200, "request successful");
+
+$m->form('TicketUpdate');
+$m->field('Attach',  FaviconFile);
+$m->field('UpdateContent', 'Message');
+$m->click('SubmitTicket');
+is($m->status, 200, "request successful");
+
+$m->content_like(qr/Download bplogo\.gif/, 'page has file name');
+$m->content_like(qr/Download favicon\.png/, 'page has file name');
+
index 06c04dc..741c695 100644 (file)
@@ -563,6 +563,10 @@ sub insert_data {
                 next;
             }
             my ( $return, $msg ) = $new_entry->Create(%$item);
+            unless( $return ) {
+                print "(Error: $msg)\n";
+                next;
+            }
 
             foreach my $value ( @{$values} ) {
                 my ( $eval, $emsg ) = $new_entry->AddValue(%$value);
index ce1f441..d867fc2 100644 (file)
@@ -255,7 +255,7 @@ DBD::Pg 1.41
 .
 
 $deps{'SQLITE'} = [ _( << '.') ];
-DBD::SQLite
+DBD::SQLite 1.00
 .
 
 if ($args{'download'}) {