diff options
60 files changed, 4052 insertions, 1987 deletions
diff --git a/rt/Changelog b/rt/Changelog index a01bc89c1..c61acace2 100644 --- a/rt/Changelog +++ b/rt/Changelog @@ -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: diff --git a/rt/bin/rt-crontool.in b/rt/bin/rt-crontool.in index 76b08c344..0cfc4a9fc 100644 --- a/rt/bin/rt-crontool.in +++ b/rt/bin/rt-crontool.in @@ -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"; diff --git a/rt/bin/rt.in b/rt/bin/rt.in index d12460b06..c80577f4a 100644 --- a/rt/bin/rt.in +++ b/rt/bin/rt.in @@ -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 -- diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in index 73b10143d..4cc4d6128 100644 --- a/rt/bin/webmux.pl.in +++ b/rt/bin/webmux.pl.in @@ -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 { diff --git a/rt/configure b/rt/configure index b1c5bba71..de6576b8b 100755 --- a/rt/configure +++ b/rt/configure @@ -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'`\\" diff --git a/rt/configure.ac b/rt/configure.ac index 0d38ba482..3f33c3b82 100644 --- a/rt/configure.ac +++ b/rt/configure.ac @@ -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 diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in index 10d46eb50..64fcf0025 100644 --- a/rt/etc/RT_Config.pm.in +++ b/rt/etc/RT_Config.pm.in @@ -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 diff --git a/rt/etc/schema.mysql b/rt/etc/schema.mysql index 60f1abae2..b7d53f884 100755 --- a/rt/etc/schema.mysql +++ b/rt/etc/schema.mysql @@ -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); diff --git a/rt/html/Admin/Groups/index.html b/rt/html/Admin/Groups/index.html index 073440696..50857e5f4 100644 --- a/rt/html/Admin/Groups/index.html +++ b/rt/html/Admin/Groups/index.html @@ -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+)/) { diff --git a/rt/html/Elements/CollectionAsTable/ParseFormat b/rt/html/Elements/CollectionAsTable/ParseFormat index 57434efe2..be56dea76 100644 --- a/rt/html/Elements/CollectionAsTable/ParseFormat +++ b/rt/html/Elements/CollectionAsTable/ParseFormat @@ -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; diff --git a/rt/html/Elements/EditCustomFieldSelect b/rt/html/Elements/EditCustomFieldSelect index 2a2a64a1d..5dd4d0d69 100644 --- a/rt/html/Elements/EditCustomFieldSelect +++ b/rt/html/Elements/EditCustomFieldSelect @@ -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' %> diff --git a/rt/html/Elements/QuickCreate b/rt/html/Elements/QuickCreate index 0b97121a4..8fdce4cbc 100644 --- a/rt/html/Elements/QuickCreate +++ b/rt/html/Elements/QuickCreate @@ -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> diff --git a/rt/html/Elements/Quicksearch b/rt/html/Elements/Quicksearch index d54f72e88..5f1af0f2d 100644 --- a/rt/html/Elements/Quicksearch +++ b/rt/html/Elements/Quicksearch @@ -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(); diff --git a/rt/html/Elements/SelectNewTicketQueue b/rt/html/Elements/SelectNewTicketQueue index d47b58a83..51b89b2a6 100644 --- a/rt/html/Elements/SelectNewTicketQueue +++ b/rt/html/Elements/SelectNewTicketQueue @@ -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'}%>) diff --git a/rt/html/Elements/ShowCustomFields b/rt/html/Elements/ShowCustomFields index 986184120..199fe3606 100644 --- a/rt/html/Elements/ShowCustomFields +++ b/rt/html/Elements/ShowCustomFields @@ -44,36 +44,42 @@ %# %# 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 diff --git a/rt/html/REST/1.0/Forms/ticket/default b/rt/html/REST/1.0/Forms/ticket/default index 78f6c9562..7d515e51f 100644 --- a/rt/html/REST/1.0/Forms/ticket/default +++ b/rt/html/REST/1.0/Forms/ticket/default @@ -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) ], { diff --git a/rt/html/REST/1.0/NoAuth/mail-gateway b/rt/html/REST/1.0/NoAuth/mail-gateway index 5252c1968..65d55508d 100644 --- a/rt/html/REST/1.0/NoAuth/mail-gateway +++ b/rt/html/REST/1.0/NoAuth/mail-gateway @@ -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> diff --git a/rt/html/REST/1.0/search/ticket b/rt/html/REST/1.0/search/ticket index d0ab59e98..0990fd69b 100644 --- a/rt/html/REST/1.0/search/ticket +++ b/rt/html/REST/1.0/search/ticket @@ -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 ]; } diff --git a/rt/html/SelfService/Create.html b/rt/html/SelfService/Create.html index d60ae267a..bfa7534eb 100644 --- a/rt/html/SelfService/Create.html +++ b/rt/html/SelfService/Create.html @@ -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> diff --git a/rt/html/Ticket/Create.html b/rt/html/Ticket/Create.html index b547242f2..fc4cc20ef 100644 --- a/rt/html/Ticket/Create.html +++ b/rt/html/Ticket/Create.html @@ -105,7 +105,7 @@ <&|/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> diff --git a/rt/html/Ticket/Display.html b/rt/html/Ticket/Display.html index dd4c093dc..908a7a93a 100644 --- a/rt/html/Ticket/Display.html +++ b/rt/html/Ticket/Display.html @@ -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); diff --git a/rt/html/Ticket/Elements/EditCustomFields b/rt/html/Ticket/Elements/EditCustomFields index 6ae188fa7..78da71201 100644 --- a/rt/html/Ticket/Elements/EditCustomFields +++ b/rt/html/Ticket/Elements/EditCustomFields @@ -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 diff --git a/rt/html/Ticket/Elements/PreviewScrips b/rt/html/Ticket/Elements/PreviewScrips index a3492b749..491f8e3f3 100755 --- a/rt/html/Ticket/Elements/PreviewScrips +++ b/rt/html/Ticket/Elements/PreviewScrips @@ -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> diff --git a/rt/html/Ticket/Elements/ShowBasics b/rt/html/Ticket/Elements/ShowBasics index 00ed3ccd1..e5f09f693 100644 --- a/rt/html/Ticket/Elements/ShowBasics +++ b/rt/html/Ticket/Elements/ShowBasics @@ -45,36 +45,36 @@ %# 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> diff --git a/rt/html/Ticket/Elements/ShowDates b/rt/html/Ticket/Elements/ShowDates index 2ccbb3fea..322fafd99 100644 --- a/rt/html/Ticket/Elements/ShowDates +++ b/rt/html/Ticket/Elements/ShowDates @@ -45,36 +45,36 @@ %# 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> diff --git a/rt/html/Ticket/Elements/ShowHistory b/rt/html/Ticket/Elements/ShowHistory index 75e34776f..878e2535c 100644 --- a/rt/html/Ticket/Elements/ShowHistory +++ b/rt/html/Ticket/Elements/ShowHistory @@ -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); diff --git a/rt/html/Ticket/Elements/ShowRequestor b/rt/html/Ticket/Elements/ShowRequestor index 421d38e0a..57bfa0e55 100644 --- a/rt/html/Ticket/Elements/ShowRequestor +++ b/rt/html/Ticket/Elements/ShowRequestor @@ -47,17 +47,14 @@ 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 diff --git a/rt/html/Ticket/Elements/ShowSummary b/rt/html/Ticket/Elements/ShowSummary index 5a6e7e099..e2f3e7195 100644 --- a/rt/html/Ticket/Elements/ShowSummary +++ b/rt/html/Ticket/Elements/ShowSummary @@ -79,6 +79,9 @@ <& /Elements/TitleBoxEnd &> <BR> + + <& /Elements/Callback, %ARGS, _CallbackName => 'LeftColumn' &> + </TD> <TD VALIGN=TOP WIDTH="50%" class="boxcontainer"> @@ -100,6 +103,7 @@ <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &> + <& /Elements/Callback, %ARGS, _CallbackName => 'RightColumn' &> </TD> </TR> diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in index f7c882b61..4d259b0e1 100644 --- a/rt/lib/RT.pm.in +++ b/rt/lib/RT.pm.in @@ -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]; }; # }}} diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm index 431b97c75..1ebcb0ccd 100755 --- a/rt/lib/RT/Action/SendEmail.pm +++ b/rt/lib/RT/Action/SendEmail.pm @@ -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); diff --git a/rt/lib/RT/Attachment_Overlay.pm b/rt/lib/RT/Attachment_Overlay.pm index fe189e378..d1f0ed40c 100644 --- a/rt/lib/RT/Attachment_Overlay.pm +++ b/rt/lib/RT/Attachment_Overlay.pm @@ -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' :".$@); } diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm index cdde9ee5b..c38fc8353 100755 --- a/rt/lib/RT/Condition/Generic.pm +++ b/rt/lib/RT/Condition/Generic.pm @@ -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, diff --git a/rt/lib/RT/CustomField_Overlay.pm b/rt/lib/RT/CustomField_Overlay.pm index 743c85cd7..07a953c79 100644 --- a/rt/lib/RT/CustomField_Overlay.pm +++ b/rt/lib/RT/CustomField_Overlay.pm @@ -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 diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm index 620acc759..f951df3a2 100644 --- a/rt/lib/RT/Date.pm +++ b/rt/lib/RT/Date.pm @@ -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); - - } diff --git a/rt/lib/RT/Group_Overlay.pm b/rt/lib/RT/Group_Overlay.pm index 41cf49732..29e4a8bdf 100644 --- a/rt/lib/RT/Group_Overlay.pm +++ b/rt/lib/RT/Group_Overlay.pm @@ -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') ); } diff --git a/rt/lib/RT/I18N.pm b/rt/lib/RT/I18N.pm index e45faf3af..448f4a28e 100644 --- a/rt/lib/RT/I18N.pm +++ b/rt/lib/RT/I18N.pm @@ -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) = diff --git a/rt/lib/RT/I18N/de.po b/rt/lib/RT/I18N/de.po index 6c4c38378..eacd65e33 100644 --- a/rt/lib/RT/I18N/de.po +++ b/rt/lib/RT/I18N/de.po @@ -1,292 +1,316 @@ -# 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 -#. ('»|«', - $RT::VERSION, - '2005', - '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) +#. ('»|«', +#: 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\" /> %1" +msgstr "<input type=\"submit\" class=\"button\" value=\"Neues Ticket in\" /> %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\"> %1" msgstr "<input type=\"submit\" value=\"Neue Anfrage in\"> %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
-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" diff --git a/rt/lib/RT/I18N/pt_br.po b/rt/lib/RT/I18N/pt_br.po index cf172b1be..13df765fa 100644 --- a/rt/lib/RT/I18N/pt_br.po +++ b/rt/lib/RT/I18N/pt_br.po @@ -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" diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm index 8c9329508..8ed0ffd8d 100644 --- a/rt/lib/RT/Interface/CLI.pm +++ b/rt/lib/RT/Interface/CLI.pm @@ -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); diff --git a/rt/lib/RT/Interface/Email.pm b/rt/lib/RT/Interface/Email.pm index efc4c268e..de125f560 100755 --- a/rt/lib/RT/Interface/Email.pm +++ b/rt/lib/RT/Interface/Email.pm @@ -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; diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm index ef315dd53..5143764e1 100644 --- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm +++ b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm @@ -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); diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm index 279ddf4b3..981604bf0 100644 --- a/rt/lib/RT/Interface/REST.pm +++ b/rt/lib/RT/Interface/REST.pm @@ -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); diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm index 724d7e592..8bc840ba4 100644 --- a/rt/lib/RT/Interface/Web.pm +++ b/rt/lib/RT/Interface/Web.pm @@ -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 diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm index ce9222586..e41490f8f 100644 --- a/rt/lib/RT/Interface/Web/Handler.pm +++ b/rt/lib/RT/Interface/Web/Handler.pm @@ -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'); diff --git a/rt/lib/RT/Link_Overlay.pm b/rt/lib/RT/Link_Overlay.pm index c870ee4c4..a45cb2a61 100644 --- a/rt/lib/RT/Link_Overlay.pm +++ b/rt/lib/RT/Link_Overlay.pm @@ -268,8 +268,8 @@ sub TargetURI { =cut sub TargetObj { - my $self = shift; - return $self->TargetURI->Object; + my $self = shift; + return $self->TargetURI->Object; } # }}} diff --git a/rt/lib/RT/Links_Overlay.pm b/rt/lib/RT/Links_Overlay.pm index 203b60a9e..e1927f842 100644 --- a/rt/lib/RT/Links_Overlay.pm +++ b/rt/lib/RT/Links_Overlay.pm @@ -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; } } diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm index 341d88bfc..1b622739e 100755 --- a/rt/lib/RT/Record.pm +++ b/rt/lib/RT/Record.pm @@ -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'});; } diff --git a/rt/lib/RT/Template_Overlay.pm b/rt/lib/RT/Template_Overlay.pm index bfff0f03e..575333ef1 100644 --- a/rt/lib/RT/Template_Overlay.pm +++ b/rt/lib/RT/Template_Overlay.pm @@ -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); diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm index 1ab91e28e..a294dcafd 100644 --- a/rt/lib/RT/Ticket_Overlay.pm +++ b/rt/lib/RT/Ticket_Overlay.pm @@ -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); } diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm index 1c31f3ffd..98a6ac61a 100644 --- a/rt/lib/RT/Tickets_Overlay.pm +++ b/rt/lib/RT/Tickets_Overlay.pm @@ -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'}, ), ); diff --git a/rt/lib/RT/Transaction_Overlay.pm b/rt/lib/RT/Transaction_Overlay.pm index f6647c647..d49e8d34e 100644 --- a/rt/lib/RT/Transaction_Overlay.pm +++ b/rt/lib/RT/Transaction_Overlay.pm @@ -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'); } } diff --git a/rt/lib/RT/URI.pm b/rt/lib/RT/URI.pm index fdbe63bea..e4e533aee 100644 --- a/rt/lib/RT/URI.pm +++ b/rt/lib/RT/URI.pm @@ -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); } diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm index 56bfef33a..49d080833 100644 --- a/rt/lib/RT/URI/base.pm +++ b/rt/lib/RT/URI/base.pm @@ -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; diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm index ba98b1df4..bb2c188f9 100644 --- a/rt/lib/RT/URI/fsck_com_rt.pm +++ b/rt/lib/RT/URI/fsck_com_rt.pm @@ -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 index 000000000..98af18513 --- /dev/null +++ b/rt/lib/t/regression/06-mime_decoding.t @@ -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" + ); +} + diff --git a/rt/lib/t/regression/06mailgateway.t b/rt/lib/t/regression/06mailgateway.t index 1bdc38a69..12b55885e 100644 --- a/rt/lib/t/regression/06mailgateway.t +++ b/rt/lib/t/regression/06mailgateway.t @@ -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; + diff --git a/rt/lib/t/regression/22search_tix_by_txn.t b/rt/lib/t/regression/22search_tix_by_txn.t index 958273c5c..f43fc6401 100644 --- a/rt/lib/t/regression/22search_tix_by_txn.t +++ b/rt/lib/t/regression/22search_tix_by_txn.t @@ -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 index 000000000..d9d1a8440 --- /dev/null +++ b/rt/lib/t/regression/23-web_attachments.t @@ -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'); + diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in index 06c04dcf1..741c695cf 100644 --- a/rt/sbin/rt-setup-database.in +++ b/rt/sbin/rt-setup-database.in @@ -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); diff --git a/rt/sbin/rt-test-dependencies.in b/rt/sbin/rt-test-dependencies.in index ce1f44150..d867fc2e4 100644 --- a/rt/sbin/rt-test-dependencies.in +++ b/rt/sbin/rt-test-dependencies.in @@ -255,7 +255,7 @@ DBD::Pg 1.41 . $deps{'SQLITE'} = [ _( << '.') ]; -DBD::SQLite +DBD::SQLite 1.00 . if ($args{'download'}) { |